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 2023/05/08 15:10:55 UTC

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

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 410aa896869 Published site at d49df8b7a96cbeca60c09f837f2cd4f2067f9ddf.
410aa896869 is described below

commit 410aa896869a0e96c01d92c4df3e741c046dea2a
Author: jenkins <bu...@apache.org>
AuthorDate: Mon May 8 15:10:45 2023 +0000

    Published site at d49df8b7a96cbeca60c09f837f2cd4f2067f9ddf.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |   10 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 .../HRegionServer.CompactionChecker.html           |   14 +-
 .../HRegionServer.MovedRegionInfo.html             |   12 +-
 .../HRegionServer.PeriodicMemStoreFlusher.html     |   14 +-
 .../HRegionServer.SystemExitWhenAbortTimeout.html  |    6 +-
 .../hadoop/hbase/regionserver/HRegionServer.html   |  468 +-
 .../HRegionServer.CompactionChecker.html           | 6859 ++++++++++----------
 .../HRegionServer.MovedRegionInfo.html             | 6859 ++++++++++----------
 .../HRegionServer.PeriodicMemStoreFlusher.html     | 6859 ++++++++++----------
 .../HRegionServer.SystemExitWhenAbortTimeout.html  | 6859 ++++++++++----------
 .../hadoop/hbase/regionserver/HRegionServer.html   | 6859 ++++++++++----------
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-management.html                              |    2 +-
 licenses.html                                      |    2 +-
 mailing-lists.html                                 |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 scm.html                                           |    2 +-
 sponsors.html                                      |    2 +-
 summary.html                                       |    2 +-
 supportingprojects.html                            |    2 +-
 team.html                                          |    2 +-
 41 files changed, 17438 insertions(+), 17443 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index e18c795076e..eb31e52c60e 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -464,7 +464,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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 db909cafb32..103ae9d0130 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 2.0.6, based on Prawn 2.4.0)
 /Producer (Apache HBase Team)
-/ModDate (D:20230505143052+00'00')
-/CreationDate (D:20230505150425+00'00')
+/ModDate (D:20230508143055+00'00')
+/CreationDate (D:20230508150444+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index a6c10c5b24b..9f992eca9ba 100644
--- a/book.html
+++ b/book.html
@@ -48313,7 +48313,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-alpha-4-SNAPSHOT<br>
-Last updated 2023-05-05 14:30:52 UTC
+Last updated 2023-05-08 14:30:55 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index 471f6e4317b..b3fd09dddf1 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -180,7 +180,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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 188270ae6a2..37251d2241a 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -12264,25 +12264,25 @@
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'TEST_SKIP_REPORTING_TRANSITION' must be private and have accessor methods.</td>
-<td>248</td></tr>
+<td>247</td></tr>
 <tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 228 lines (max allowed is 150).</td>
-<td>788</td></tr>
+<td>787</td></tr>
 <tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td>930</td></tr>
+<td>929</td></tr>
 <tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 179 lines (max allowed is 150).</td>
-<td>1804</td></tr></table></section><section>
+<td>1803</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</h3>
 <table border="0" class="table table-striped">
 <tr class="a">
@@ -18537,7 +18537,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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 9e39e3ca3df..5652696f6ba 100644
--- a/coc.html
+++ b/coc.html
@@ -248,7 +248,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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 c192cd2130a..0fdf42e94f4 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -313,7 +313,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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 939af3d824d..d882f919068 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -903,7 +903,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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 b161ed9a5f2..68fa2a72c4f 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -195,7 +195,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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 8db2a3a0fb3..2ab4432fcbc 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1192,7 +1192,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2023
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-05</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2023-05-08</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/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 338f3ac3453..b7425a7e467 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1619">HRegionServer.CompactionChecker</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1618">HRegionServer.CompactionChecker</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 <div class="block">Inner class that runs on a long period checking if regions need compaction.</div>
 </li>
@@ -234,7 +234,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>instance</h4>
-<pre>private 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/HRegionServer.CompactionChecker.html#line.1620">instance</a></pre>
+<pre>private 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/HRegionServer.CompactionChecker.html#line.1619">instance</a></pre>
 </li>
 </ul>
 <a name="majorCompactPriority">
@@ -243,7 +243,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactPriority</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1621">majorCompactPriority</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1620">majorCompactPriority</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_PRIORITY">
@@ -252,7 +252,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_PRIORITY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1622">DEFAULT_PRIORITY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1621">DEFAULT_PRIORITY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.CompactionChecker.DEFAULT_PRIORITY">Constant Field Values</a></dd>
@@ -265,7 +265,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>iteration</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1625">iteration</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1624">iteration</a></pre>
 </li>
 </ul>
 </li>
@@ -282,7 +282,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CompactionChecker</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1627">CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1626">CompactionChecker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;h,
                   int&nbsp;sleepTime,
                   <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper)</pre>
 </li>
@@ -301,7 +301,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1640">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1639">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 90d265e3584..2cbcf6c632b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3206">HRegionServer.MovedRegionInfo</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3205">HRegionServer.MovedRegionInfo</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -210,7 +210,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3207">serverName</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3206">serverName</a></pre>
 </li>
 </ul>
 <a name="seqNum">
@@ -219,7 +219,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>seqNum</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3208">seqNum</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3207">seqNum</a></pre>
 </li>
 </ul>
 </li>
@@ -236,7 +236,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3210">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3209">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 long&nbsp;closeSeqNum)</pre>
 </li>
 </ul>
@@ -254,7 +254,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3215">getServerName</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3214">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getSeqNum--">
@@ -263,7 +263,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3219">getSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3218">getSeqNum</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index 9e59b353a1c..a9b41ee3466 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1683">HRegionServer.PeriodicMemStoreFlusher</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1682">HRegionServer.PeriodicMemStoreFlusher</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>private 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/HRegionServer.PeriodicMemStoreFlusher.html#line.1684">server</a></pre>
+<pre>private 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/HRegionServer.PeriodicMemStoreFlusher.html#line.1683">server</a></pre>
 </li>
 </ul>
 <a name="RANGE_OF_DELAY">
@@ -241,7 +241,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>RANGE_OF_DELAY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1685">RANGE_OF_DELAY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1684">RANGE_OF_DELAY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemStoreFlusher.RANGE_OF_DELAY">Constant Field Values</a></dd>
@@ -254,7 +254,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>MIN_DELAY_TIME</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1686">MIN_DELAY_TIME</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1685">MIN_DELAY_TIME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PeriodicMemStoreFlusher.MIN_DELAY_TIME">Constant Field Values</a></dd>
@@ -267,7 +267,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rangeOfDelayMs</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1687">rangeOfDelayMs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1686">rangeOfDelayMs</a></pre>
 </li>
 </ul>
 </li>
@@ -284,7 +284,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PeriodicMemStoreFlusher</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1689">PeriodicMemStoreFlusher</a>(int&nbsp;cacheFlushInterval,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1688">PeriodicMemStoreFlusher</a>(int&nbsp;cacheFlushInterval,
                         <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server)</pre>
 </li>
 </ul>
@@ -302,7 +302,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>chore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1699">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1698">chore</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">ScheduledChore</a></code></span></div>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
index 5845375a73f..5c0ef45d880 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3544">HRegionServer.SystemExitWhenAbortTimeout</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3543">HRegionServer.SystemExitWhenAbortTimeout</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.html?is-external=true" title="class or interface in java.util">TimerTask</a></pre>
 <div class="block">Force to terminate region server when abort timeout.</div>
 </li>
@@ -199,7 +199,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SystemExitWhenAbortTimeout</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3546">SystemExitWhenAbortTimeout</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3545">SystemExitWhenAbortTimeout</a>()</pre>
 </li>
 </ul>
 </li>
@@ -216,7 +216,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3550">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3549">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index 0bcbcb2e270..f978f77fac7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Tools")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.238">HRegionServer</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.237">HRegionServer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">LastSequenceId</a></pre>
 <div class="block">HRegionServer makes a set of HRegions available to clients. It checks in with the HMaster. There
@@ -1507,7 +1507,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.241">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.240">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_SKIP_REPORTING_TRANSITION">
@@ -1517,7 +1517,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <li class="blockList">
 <h4>TEST_SKIP_REPORTING_TRANSITION</h4>
 <pre>@InterfaceAudience.Private
-public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.248">TEST_SKIP_REPORTING_TRANSITION</a></pre>
+public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.247">TEST_SKIP_REPORTING_TRANSITION</a></pre>
 <div class="block">For testing only! Set to true to skip notifying region assignment to master .</div>
 </li>
 </ul>
@@ -1527,7 +1527,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsInTransitionInRS</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;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.254">regionsInTransitionInRS</a></pre>
+<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;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.253">regionsInTransitionInRS</a></pre>
 <div class="block">A map from RegionName to current action in progress. Boolean value indicates: true - if open
  region action in progress false - if close region action in progress</div>
 </li>
@@ -1538,7 +1538,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>submittedRegionProcedures</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/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href [...]
+<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/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href [...]
 <div class="block">Used to cache the open/close region procedures which already submitted. See
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#submitRegionProcedure-long-"><code>submitRegionProcedure(long)</code></a>.</div>
 </li>
@@ -1549,7 +1549,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>executedRegionProcedures</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/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.266">executedRegionProcedures</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/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.265">executedRegionProcedures</a></pre>
 <div class="block">Used to cache the open/close region procedures which already executed. See
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#submitRegionProcedure-long-"><code>submitRegionProcedure(long)</code></a>.</div>
 </li>
@@ -1560,7 +1560,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>movedRegionInfoCache</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="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegio [...]
+<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="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegio [...]
 <div class="block">Used to cache the moved-out regions</div>
 </li>
 </ul>
@@ -1570,7 +1570,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheFlusher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.275">cacheFlusher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.274">cacheFlusher</a></pre>
 </li>
 </ul>
 <a name="hMemManager">
@@ -1579,7 +1579,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>hMemManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.277">hMemManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.276">hMemManager</a></pre>
 </li>
 </ul>
 <a name="replicationSourceHandler">
@@ -1588,7 +1588,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationSourceHandler</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.280">replicationSourceHandler</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.279">replicationSourceHandler</a></pre>
 </li>
 </ul>
 <a name="replicationSinkHandler">
@@ -1597,7 +1597,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationSinkHandler</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.281">replicationSinkHandler</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.280">replicationSinkHandler</a></pre>
 </li>
 </ul>
 <a name="sameReplicationSourceAndSink">
@@ -1606,7 +1606,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>sameReplicationSourceAndSink</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.282">sameReplicationSourceAndSink</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.281">sameReplicationSourceAndSink</a></pre>
 </li>
 </ul>
 <a name="compactSplitThread">
@@ -1615,7 +1615,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>compactSplitThread</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.285">compactSplitThread</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.284">compactSplitThread</a></pre>
 </li>
 </ul>
 <a name="onlineRegions">
@@ -1624,7 +1624,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>onlineRegions</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt; <a href="../../../../../src-html/org/apach [...]
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt; <a href="../../../../../src-html/org/apach [...]
 <div class="block">Map of regions currently being served by this region server. Key is the encoded region name.
  All access should be synchronized.</div>
 </li>
@@ -1635,7 +1635,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>onlineRegionsLock</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.296">onlineRegionsLock</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.295">onlineRegionsLock</a></pre>
 <div class="block">Lock for gating access to <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#onlineRegions"><code>onlineRegions</code></a>. TODO: If this map is gated by a lock, does it
  need to be a ConcurrentHashMap?</div>
 </li>
@@ -1646,7 +1646,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>regionFavoredNodesMap</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/r [...]
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/r [...]
 <div class="block">Map of encoded region names to the DataNode locations they should be hosted on We store the
  value as Address since InetSocketAddress is required by the HDFS API (create() that takes
  favored nodes as hints for placing file blocks). We could have used ServerName here as the
@@ -1663,7 +1663,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>leaseManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.310">leaseManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.309">leaseManager</a></pre>
 </li>
 </ul>
 <a name="dataFsOk">
@@ -1672,7 +1672,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>dataFsOk</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.312">dataFsOk</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.311">dataFsOk</a></pre>
 </li>
 </ul>
 <a name="ABORT_TIMEOUT">
@@ -1681,7 +1681,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>ABORT_TIMEOUT</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/HRegionServer.html#line.314">ABORT_TIMEOUT</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/HRegionServer.html#line.313">ABORT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.ABORT_TIMEOUT">Constant Field Values</a></dd>
@@ -1694,7 +1694,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ABORT_TIMEOUT</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.316">DEFAULT_ABORT_TIMEOUT</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.315">DEFAULT_ABORT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.DEFAULT_ABORT_TIMEOUT">Constant Field Values</a></dd>
@@ -1707,7 +1707,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>ABORT_TIMEOUT_TASK</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/HRegionServer.html#line.318">ABORT_TIMEOUT_TASK</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/HRegionServer.html#line.317">ABORT_TIMEOUT_TASK</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.ABORT_TIMEOUT_TASK">Constant Field Values</a></dd>
@@ -1720,7 +1720,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>stopping</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.322">stopping</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.321">stopping</a></pre>
 </li>
 </ul>
 <a name="killed">
@@ -1729,7 +1729,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>killed</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.323">killed</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.322">killed</a></pre>
 </li>
 </ul>
 <a name="threadWakeFrequency">
@@ -1738,7 +1738,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>threadWakeFrequency</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.325">threadWakeFrequency</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.324">threadWakeFrequency</a></pre>
 </li>
 </ul>
 <a name="PERIOD_COMPACTION">
@@ -1747,7 +1747,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>PERIOD_COMPACTION</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/HRegionServer.html#line.327">PERIOD_COMPACTION</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/HRegionServer.html#line.326">PERIOD_COMPACTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PERIOD_COMPACTION">Constant Field Values</a></dd>
@@ -1760,7 +1760,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>compactionCheckFrequency</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.328">compactionCheckFrequency</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.327">compactionCheckFrequency</a></pre>
 </li>
 </ul>
 <a name="PERIOD_FLUSH">
@@ -1769,7 +1769,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>PERIOD_FLUSH</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/HRegionServer.html#line.329">PERIOD_FLUSH</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/HRegionServer.html#line.328">PERIOD_FLUSH</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PERIOD_FLUSH">Constant Field Values</a></dd>
@@ -1782,7 +1782,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>flushCheckFrequency</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.330">flushCheckFrequency</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.329">flushCheckFrequency</a></pre>
 </li>
 </ul>
 <a name="rssStub">
@@ -1791,7 +1791,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>rssStub</h4>
-<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.333">rssStub</a></pre>
+<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.332">rssStub</a></pre>
 </li>
 </ul>
 <a name="lockStub">
@@ -1800,7 +1800,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>lockStub</h4>
-<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.334">lockStub</a></pre>
+<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.333">lockStub</a></pre>
 </li>
 </ul>
 <a name="rpcClient">
@@ -1809,7 +1809,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcClient</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.336">rpcClient</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.335">rpcClient</a></pre>
 </li>
 </ul>
 <a name="uncaughtExceptionHandler">
@@ -1818,7 +1818,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>uncaughtExceptionHandler</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.338">uncaughtExceptionHandler</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.337">uncaughtExceptionHandler</a></pre>
 </li>
 </ul>
 <a name="pauseMonitor">
@@ -1827,7 +1827,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>pauseMonitor</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.340">pauseMonitor</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.339">pauseMonitor</a></pre>
 </li>
 </ul>
 <a name="rsSnapshotVerifier">
@@ -1836,7 +1836,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>rsSnapshotVerifier</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.regionserver">RSSnapshotVerifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.342">rsSnapshotVerifier</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.regionserver">RSSnapshotVerifier</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.341">rsSnapshotVerifier</a></pre>
 </li>
 </ul>
 <a name="REGIONSERVER">
@@ -1845,7 +1845,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER</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/HRegionServer.html#line.345">REGIONSERVER</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/HRegionServer.html#line.344">REGIONSERVER</a></pre>
 <div class="block">region server process name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1859,7 +1859,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsRegionServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.347">metricsRegionServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.346">metricsRegionServer</a></pre>
 </li>
 </ul>
 <a name="metricsRegionServerImpl">
@@ -1868,7 +1868,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsRegionServerImpl</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.348">metricsRegionServerImpl</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.347">metricsRegionServerImpl</a></pre>
 </li>
 </ul>
 <a name="compactionChecker">
@@ -1877,7 +1877,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>compactionChecker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.353">compactionChecker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.352">compactionChecker</a></pre>
 <div class="block">Check for compactions requests.</div>
 </li>
 </ul>
@@ -1887,7 +1887,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicFlusher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.358">periodicFlusher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.357">periodicFlusher</a></pre>
 <div class="block">Check for flushes</div>
 </li>
 </ul>
@@ -1897,7 +1897,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>walFactory</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.360">walFactory</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.359">walFactory</a></pre>
 </li>
 </ul>
 <a name="walRoller">
@@ -1906,7 +1906,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>walRoller</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.362">walRoller</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.361">walRoller</a></pre>
 </li>
 </ul>
 <a name="procedureResultReporter">
@@ -1915,7 +1915,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureResultReporter</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RemoteProcedureResultReporter.html" title="class in org.apache.hadoop.hbase.regionserver">RemoteProcedureResultReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.365">procedureResultReporter</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RemoteProcedureResultReporter.html" title="class in org.apache.hadoop.hbase.regionserver">RemoteProcedureResultReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.364">procedureResultReporter</a></pre>
 </li>
 </ul>
 <a name="online">
@@ -1924,7 +1924,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>online</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/HRegionServer.html#line.368">online</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/HRegionServer.html#line.367">online</a></pre>
 </li>
 </ul>
 <a name="masterAddressTracker">
@@ -1933,7 +1933,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>masterAddressTracker</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.371">masterAddressTracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.370">masterAddressTracker</a></pre>
 </li>
 </ul>
 <a name="splitLogWorker">
@@ -1942,7 +1942,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>splitLogWorker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">SplitLogWorker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.374">splitLogWorker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">SplitLogWorker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.373">splitLogWorker</a></pre>
 </li>
 </ul>
 <a name="shortOperationTimeout">
@@ -1951,7 +1951,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>shortOperationTimeout</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.376">shortOperationTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.375">shortOperationTimeout</a></pre>
 </li>
 </ul>
 <a name="retryPauseTime">
@@ -1960,7 +1960,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>retryPauseTime</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.379">retryPauseTime</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.378">retryPauseTime</a></pre>
 </li>
 </ul>
 <a name="regionServerAccounting">
@@ -1969,7 +1969,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerAccounting</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.381">regionServerAccounting</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.380">regionServerAccounting</a></pre>
 </li>
 </ul>
 <a name="namedQueueServiceChore">
@@ -1978,7 +1978,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>namedQueueServiceChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueServiceChore.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueServiceChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.383">namedQueueServiceChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueServiceChore.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueServiceChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.382">namedQueueServiceChore</a></pre>
 </li>
 </ul>
 <a name="blockCache">
@@ -1987,7 +1987,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCache</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.386">blockCache</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.385">blockCache</a></pre>
 </li>
 </ul>
 <a name="mobFileCache">
@@ -1996,7 +1996,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCache</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.388">mobFileCache</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.387">mobFileCache</a></pre>
 </li>
 </ul>
 <a name="healthCheckChore">
@@ -2005,7 +2005,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>healthCheckChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.391">healthCheckChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.390">healthCheckChore</a></pre>
 <div class="block">The health check chore.</div>
 </li>
 </ul>
@@ -2015,7 +2015,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>executorStatusChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ExecutorStatusChore.html" title="class in org.apache.hadoop.hbase">ExecutorStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.394">executorStatusChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ExecutorStatusChore.html" title="class in org.apache.hadoop.hbase">ExecutorStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.393">executorStatusChore</a></pre>
 <div class="block">The Executor status collect chore.</div>
 </li>
 </ul>
@@ -2025,7 +2025,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceManagerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.397">nonceManagerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.396">nonceManagerChore</a></pre>
 <div class="block">The nonce manager chore.</div>
 </li>
 </ul>
@@ -2035,7 +2035,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorServiceHandlers</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hbase.thirdparty.com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.399">coprocessorServiceHandlers</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hbase.thirdparty.com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.398">coprocessorServiceHandlers</a></pre>
 </li>
 </ul>
 <a name="RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY">
@@ -2046,7 +2046,7 @@ public static&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hb
 <h4>RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</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>
  @InterfaceAudience.LimitedPrivate(value="Configuration")
-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/HRegionServer.html#line.408">RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</a></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/HRegionServer.html#line.407">RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and will be removed in 4.0.0. Use
              <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY"><code>UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</code></a> instead.</span></div>
 <dl>
@@ -2063,7 +2063,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <li class="blockList">
 <h4>UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</h4>
 <pre>@InterfaceAudience.LimitedPrivate(value="Configuration")
-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/HRegionServer.html#line.416">UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</a></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/HRegionServer.html#line.415">UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</a></pre>
 <div class="block">HBASE-18226: This config and hbase.unsafe.regionserver.hostname are mutually exclusive.
  Exception will be thrown if both are used.</div>
 <dl>
@@ -2078,7 +2078,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterId</h4>
-<pre>private&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/HRegionServer.html#line.422">clusterId</a></pre>
+<pre>private&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/HRegionServer.html#line.421">clusterId</a></pre>
 <div class="block">Unique identifier for the cluster we are a part of.</div>
 </li>
 </ul>
@@ -2088,7 +2088,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>storefileRefresher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.425">storefileRefresher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.424">storefileRefresher</a></pre>
 </li>
 </ul>
 <a name="rsHost">
@@ -2097,7 +2097,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>rsHost</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.427">rsHost</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.426">rsHost</a></pre>
 </li>
 </ul>
 <a name="rspmHost">
@@ -2106,7 +2106,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>rspmHost</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">RegionServerProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.429">rspmHost</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">RegionServerProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.428">rspmHost</a></pre>
 </li>
 </ul>
 <a name="rsQuotaManager">
@@ -2115,7 +2115,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>rsQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.431">rsQuotaManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.430">rsQuotaManager</a></pre>
 </li>
 </ul>
 <a name="rsSpaceQuotaManager">
@@ -2124,7 +2124,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>rsSpaceQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.432">rsSpaceQuotaManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.431">rsSpaceQuotaManager</a></pre>
 </li>
 </ul>
 <a name="nonceManager">
@@ -2133,7 +2133,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceManager</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.451">nonceManager</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.450">nonceManager</a></pre>
 <div class="block">Nonce manager. Nonces are used to make operations like increment and append idempotent in the
  case where client doesn't receive the response from a successful operation and retries. We
  track the successful ops for some time via a nonce sent by client and handle duplicate
@@ -2157,7 +2157,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>brokenStoreFileCleaner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BrokenStoreFileCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">BrokenStoreFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.453">brokenStoreFileCleaner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BrokenStoreFileCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">BrokenStoreFileCleaner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.452">brokenStoreFileCleaner</a></pre>
 </li>
 </ul>
 <a name="rsMobFileCleanerChore">
@@ -2166,7 +2166,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>rsMobFileCleanerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/RSMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">RSMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.455">rsMobFileCleanerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/RSMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">RSMobFileCleanerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.454">rsMobFileCleanerChore</a></pre>
 </li>
 </ul>
 <a name="compactedFileDischarger">
@@ -2176,7 +2176,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <li class="blockList">
 <h4>compactedFileDischarger</h4>
 <pre>@InterfaceAudience.Private
-<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.458">compactedFileDischarger</a></pre>
+<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.457">compactedFileDischarger</a></pre>
 </li>
 </ul>
 <a name="flushThroughputController">
@@ -2185,7 +2185,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>flushThroughputController</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.460">flushThroughputController</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.459">flushThroughputController</a></pre>
 </li>
 </ul>
 <a name="secureBulkLoadManager">
@@ -2194,7 +2194,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>secureBulkLoadManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.462">secureBulkLoadManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.461">secureBulkLoadManager</a></pre>
 </li>
 </ul>
 <a name="fsUtilizationChore">
@@ -2203,7 +2203,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>fsUtilizationChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html" title="class in org.apache.hadoop.hbase.quotas">FileSystemUtilizationChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.464">fsUtilizationChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html" title="class in org.apache.hadoop.hbase.quotas">FileSystemUtilizationChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.463">fsUtilizationChore</a></pre>
 </li>
 </ul>
 <a name="bootstrapNodeManager">
@@ -2212,7 +2212,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>bootstrapNodeManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BootstrapNodeManager.html" title="class in org.apache.hadoop.hbase.regionserver">BootstrapNodeManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.466">bootstrapNodeManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BootstrapNodeManager.html" title="class in org.apache.hadoop.hbase.regionserver">BootstrapNodeManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.465">bootstrapNodeManager</a></pre>
 </li>
 </ul>
 <a name="masterless">
@@ -2221,7 +2221,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>masterless</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.475">masterless</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.474">masterless</a></pre>
 <div class="block">True if this RegionServer is coming up in a cluster where there is no Master; means it needs to
  just come up and make do without a Master to talk to: e.g. in test or HRegionServer is doing
  other than its usual duties: e.g. as an hollowed-out host whose only purpose is as a
@@ -2235,7 +2235,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTERLESS_CONFIG_NAME</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/HRegionServer.html#line.476">MASTERLESS_CONFIG_NAME</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/HRegionServer.html#line.475">MASTERLESS_CONFIG_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.MASTERLESS_CONFIG_NAME">Constant Field Values</a></dd>
@@ -2248,7 +2248,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER_CODEC</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/HRegionServer.html#line.479">REGIONSERVER_CODEC</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/HRegionServer.html#line.478">REGIONSERVER_CODEC</a></pre>
 <div class="block">regionserver codec list</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -2262,7 +2262,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>abortMonitor</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.482">abortMonitor</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.481">abortMonitor</a></pre>
 </li>
 </ul>
 <a name="regionReplicationBufferManager">
@@ -2271,7 +2271,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>regionReplicationBufferManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/regionreplication/RegionReplicationBufferManager.html" title="class in org.apache.hadoop.hbase.regionserver.regionreplication">RegionReplicationBufferManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.484">regionReplicationBufferManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/regionreplication/RegionReplicationBufferManager.html" title="class in org.apache.hadoop.hbase.regionserver.regionreplication">RegionReplicationBufferManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.483">regionReplicationBufferManager</a></pre>
 </li>
 </ul>
 <a name="replicationMarkerChore">
@@ -2280,7 +2280,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationMarkerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationMarkerChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationMarkerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.489">replicationMarkerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationMarkerChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationMarkerChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.488">replicationMarkerChore</a></pre>
 </li>
 </ul>
 <a name="TIMEOUT_REGION_MOVED">
@@ -2289,7 +2289,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TIMEOUT_REGION_MOVED</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3228">TIMEOUT_REGION_MOVED</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3227">TIMEOUT_REGION_MOVED</a></pre>
 <div class="block">We need a timeout. If not there is a risk of giving a wrong information: this would double the
  number of network calls instead of reducing them.</div>
 <dl>
@@ -2312,7 +2312,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.497">HRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.496">HRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Starts a HRegionServer at the default location.
  <p/>
@@ -2338,7 +2338,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>getUseThisHostnameInstead</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.556">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.555">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2354,7 +2354,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.574">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.573">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host)
               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>
@@ -2371,7 +2371,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcessName</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.580">getProcessName</a>()</pre>
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.579">getProcessName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#getProcessName--">getProcessName</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -2384,7 +2384,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>canCreateBaseZNode</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.585">canCreateBaseZNode</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.584">canCreateBaseZNode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#canCreateBaseZNode--">canCreateBaseZNode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -2397,7 +2397,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>canUpdateTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.590">canUpdateTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.589">canUpdateTableDescriptor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -2410,7 +2410,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.595">cacheTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.594">cacheTableDescriptor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#cacheTableDescriptor--">cacheTableDescriptor</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -2423,7 +2423,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>createRpcServices</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.599">createRpcServices</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.598">createRpcServices</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2439,7 +2439,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>configureInfoServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.604">configureInfoServer</a>(<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;infoServer)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.603">configureInfoServer</a>(<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;infoServer)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#configureInfoServer-org.apache.hadoop.hbase.http.InfoServer-">configureInfoServer</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -2452,7 +2452,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>getDumpServlet</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;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.610">getDumpServlet</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;? extends javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.609">getDumpServlet</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#getDumpServlet--">getDumpServlet</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -2465,7 +2465,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>dumpRowLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.617">dumpRowLocks</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.616">dumpRowLocks</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/PrintWriter.html?is-external=true" title="class or interface in java.io">PrintWriter</a>&nbsp;out)</pre>
 <div class="block">Used by <a href="../../../../../org/apache/hadoop/hbase/regionserver/http/RSDumpServlet.html" title="class in org.apache.hadoop.hbase.regionserver.http"><code>RSDumpServlet</code></a> to generate debugging information.</div>
 </li>
 </ul>
@@ -2475,7 +2475,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.633">registerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.632">registerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#registerService-org.apache.hbase.thirdparty.com.google.protobuf.Service-">RegionServerServices</a></code></span></div>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
@@ -2495,7 +2495,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCodecs</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.654">checkCodecs</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.653">checkCodecs</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Run test on configured codecs to make sure supporting libs are in place.</div>
 <dl>
@@ -2510,7 +2510,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterId</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/HRegionServer.html#line.668">getClusterId</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.667">getClusterId</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionRegistryEndpoint.html#getClusterId--">ConnectionRegistryEndpoint</a></code></span></div>
 <div class="block">Get cluster id.</div>
 <dl>
@@ -2525,7 +2525,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>preRegistrationInitialization</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.677">preRegistrationInitialization</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.676">preRegistrationInitialization</a>()</pre>
 <div class="block">All initialization needed before we go register with Master.<br>
  Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.<br>
  In here we just put up the RpcServer, setup Connection, and ZooKeeper.</div>
@@ -2537,7 +2537,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeZooKeeper</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.706">initializeZooKeeper</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.705">initializeZooKeeper</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Bring up connection to zk ensemble and then wait until a master for this cluster and then after
@@ -2557,7 +2557,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>blockAndCheckIfStopped</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.758">blockAndCheckIfStopped</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.757">blockAndCheckIfStopped</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Utilty method to wait indefinitely on a znode availability while checking if the region server
@@ -2577,7 +2577,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>isClusterUp</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.769">isClusterUp</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.768">isClusterUp</a>()</pre>
 <div class="block">Returns True if the cluster is up.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2593,7 +2593,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeReplicationMarkerChore</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.774">initializeReplicationMarkerChore</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.773">initializeReplicationMarkerChore</a>()</pre>
 </li>
 </ul>
 <a name="run--">
@@ -2602,7 +2602,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.789">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.788">run</a>()</pre>
 <div class="block">The HRegionServer sticks in this loop until closed.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2618,7 +2618,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>containsMetaTableRegions</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1018">containsMetaTableRegions</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1017">containsMetaTableRegions</a>()</pre>
 </li>
 </ul>
 <a name="areAllUserRegionsOffline--">
@@ -2627,7 +2627,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>areAllUserRegionsOffline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1022">areAllUserRegionsOffline</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1021">areAllUserRegionsOffline</a>()</pre>
 </li>
 </ul>
 <a name="getWriteRequestCount--">
@@ -2636,7 +2636,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRequestCount</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1037">getWriteRequestCount</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1036">getWriteRequestCount</a>()</pre>
 <div class="block">Returns Current write count for all online regions.</div>
 </li>
 </ul>
@@ -2647,7 +2647,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <li class="blockList">
 <h4>tryRegionServerReport</h4>
 <pre>@InterfaceAudience.Private
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1046">tryRegionServerReport</a>(long&nbsp;reportStartTime,
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1045">tryRegionServerReport</a>(long&nbsp;reportStartTime,
                                                                 long&nbsp;reportEndTime)
                                                          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>
@@ -2662,7 +2662,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionSizesForQuotas</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1085">reportRegionSizesForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1084">reportRegionSizesForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</pre>
 <div class="block">Reports the given map of Regions and their size on the filesystem to the active Master.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2680,7 +2680,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>buildReportAndSend</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1127">buildReportAndSend</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1126">buildReportAndSend</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
                                 <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)
                          throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <div class="block">Builds the region size report and sends it to the master. Upon successful sending of the
@@ -2700,7 +2700,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>buildRegionSpaceUseReportRequest</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1143">buildRegionSpaceUseReportRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</pre>
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1142">buildRegionSpaceUseReportRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</pre>
 <div class="block">Builds a <code>RegionServerStatusProtos.RegionSpaceUseReportRequest</code> protobuf message from the region size map.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2716,7 +2716,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>convertRegionSize</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1158">convertRegionSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1157">convertRegionSize</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                                                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;sizeInBytes)</pre>
 <div class="block">Converts a pair of <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionInfo</code></a> and <code>long</code> into a <code>RegionServerStatusProtos.RegionSpaceUse</code> protobuf
  message.</div>
@@ -2735,7 +2735,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>buildServerLoad</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1164">buildServerLoad</a>(long&nbsp;reportStartTime,
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1163">buildServerLoad</a>(long&nbsp;reportStartTime,
                                                                                                          long&nbsp;reportEndTime)
                                                                                                   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>
@@ -2750,7 +2750,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsAsPrintableString</h4>
-<pre>private&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/HRegionServer.html#line.1263">getOnlineRegionsAsPrintableString</a>()</pre>
+<pre>private&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/HRegionServer.html#line.1262">getOnlineRegionsAsPrintableString</a>()</pre>
 </li>
 </ul>
 <a name="waitOnAllRegionsToClose-boolean-">
@@ -2759,7 +2759,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>waitOnAllRegionsToClose</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1277">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1276">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
 <div class="block">Wait on regions close.</div>
 </li>
 </ul>
@@ -2769,7 +2769,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepInterrupted</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1336">sleepInterrupted</a>(long&nbsp;millis)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1335">sleepInterrupted</a>(long&nbsp;millis)</pre>
 </li>
 </ul>
 <a name="shutdownWAL-boolean-">
@@ -2778,7 +2778,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownWAL</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1347">shutdownWAL</a>(boolean&nbsp;close)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1346">shutdownWAL</a>(boolean&nbsp;close)</pre>
 </li>
 </ul>
 <a name="handleReportForDutyResponse-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse-">
@@ -2787,7 +2787,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>handleReportForDutyResponse</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1367">handleReportForDutyResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;c)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1366">handleReportForDutyResponse</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;c)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Run init. Sets up wal and starts up all server threads.</div>
 <dl>
@@ -2804,7 +2804,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>startHeapMemoryManager</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1470">startHeapMemoryManager</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1469">startHeapMemoryManager</a>()</pre>
 </li>
 </ul>
 <a name="createMyEphemeralNode--">
@@ -2813,7 +2813,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>createMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1478">createMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1477">createMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2827,7 +2827,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteMyEphemeralNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1486">deleteMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1485">deleteMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2841,7 +2841,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerAccounting</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1491">getRegionServerAccounting</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1490">getRegionServerAccounting</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerAccounting--">RegionServerServices</a></code></span></div>
 <div class="block">Returns the RegionServerAccounting for this Region Server</div>
 <dl>
@@ -2856,7 +2856,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>roundSize</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1499">roundSize</a>(long&nbsp;sizeInByte,
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1498">roundSize</a>(long&nbsp;sizeInByte,
                              int&nbsp;sizeUnit)</pre>
 </li>
 </ul>
@@ -2866,7 +2866,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1515">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1514">createRegionLoad</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr,
                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder&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>
@@ -2888,7 +2888,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>createUserLoad</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1598">createUserLoad</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;user,
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1597">createUserLoad</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;user,
                                                                                                       <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsUserSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsUserSource</a>&nbsp;userSource)</pre>
 </li>
 </ul>
@@ -2898,7 +2898,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionLoad</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1611">createRegionLoad</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;encodedRegionName)
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1610">createRegionLoad</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;encodedRegionName)
                                                                                                   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>
@@ -2912,7 +2912,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1728">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1727">isOnline</a>()</pre>
 <div class="block">Report the status of the server. A server is online once all the startup is completed (setting
  up filesystem, starting executorService threads, etc.). This method is designed mostly to be
  useful in tests.</div>
@@ -2928,7 +2928,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>setupWALAndReplication</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1736">setupWALAndReplication</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1735">setupWALAndReplication</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">Setup WAL log and replication if enabled. Replication setup is done in here because it wants to
  be hooked up to WAL.</div>
@@ -2944,7 +2944,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALEventTrackerListener</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1763">getWALEventTrackerListener</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1762">getWALEventTrackerListener</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="startReplicationService--">
@@ -2953,7 +2953,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>startReplicationService</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1775">startReplicationService</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1774">startReplicationService</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">Start up replication source and sink handlers.</div>
 <dl>
@@ -2968,7 +2968,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getMasterAddressTracker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1789">getMasterAddressTracker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1788">getMasterAddressTracker</a>()</pre>
 <div class="block">Returns Master address tracker instance.</div>
 </li>
 </ul>
@@ -2978,7 +2978,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>startServices</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1804">startServices</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1803">startServices</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">Start maintenance Threads, Server, Worker and lease checker threads. Start all threads we need
  to run. This is called after we've successfully registered with the Master. Install an
@@ -3001,7 +3001,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeThreads</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1984">initializeThreads</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1983">initializeThreads</a>()</pre>
 </li>
 </ul>
 <a name="registerConfigurationObservers--">
@@ -3010,7 +3010,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>registerConfigurationObservers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2067">registerConfigurationObservers</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2066">registerConfigurationObservers</a>()</pre>
 </li>
 </ul>
 <a name="isHealthy--">
@@ -3019,7 +3019,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isHealthy</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2085">isHealthy</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2084">isHealthy</a>()</pre>
 </li>
 </ul>
 <a name="getWALs--">
@@ -3028,7 +3028,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALs</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;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2103">getWALs</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;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2102">getWALs</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getWALs--">RegionServerServices</a></code></span></div>
 <div class="block">Returns the List of WALs that are used by this server Doesn't include the meta WAL</div>
 <dl>
@@ -3043,7 +3043,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2108">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2107">getWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getWAL-org.apache.hadoop.hbase.client.RegionInfo-">RegionServerServices</a></code></span></div>
 <div class="block">Returns the WAL for a particular region. Pass null for getting the default (common) WAL</div>
@@ -3061,7 +3061,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalRoller</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2116">getWalRoller</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2115">getWalRoller</a>()</pre>
 </li>
 </ul>
 <a name="getWalFactory--">
@@ -3070,7 +3070,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalFactory</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2120">getWalFactory</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2119">getWalFactory</a>()</pre>
 </li>
 </ul>
 <a name="stop-java.lang.String-">
@@ -3079,7 +3079,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2125">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2124">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service. Implementers should favor logging errors over throwing RuntimeExceptions.</div>
 <dl>
@@ -3096,7 +3096,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2135">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2134">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                  boolean&nbsp;force,
                  <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">Stops the regionserver.</div>
@@ -3114,7 +3114,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForServerOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2157">waitForServerOnline</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2156">waitForServerOnline</a>()</pre>
 </li>
 </ul>
 <a name="postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">
@@ -3123,7 +3123,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>postOpenDeployTasks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2171">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2170">postOpenDeployTasks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">RegionServerServices</a></code></span></div>
 <div class="block">Tasks to perform after region open to complete deploy of region on regionserver</div>
@@ -3143,7 +3143,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>skipReportingTransition</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2213">skipReportingTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2212">skipReportingTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
 <div class="block">Helper method for use in tests. Skip the region transition report when there's no master around
  to receive it.</div>
 </li>
@@ -3154,7 +3154,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>createReportRegionStateTransitionRequest</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2239">createReportRegionStateTransitionRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionC [...]
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2238">createReportRegionStateTransitionRequest</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionC [...]
 </li>
 </ul>
 <a name="reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">
@@ -3163,7 +3163,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>reportRegionStateTransition</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2264">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2263">reportRegionStateTransition</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransitionContext</a>&nbsp;context)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">RegionServerServices</a></code></span></div>
 <div class="block">Notify master that a handler requests to change a region state</div>
 <dl>
@@ -3178,7 +3178,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerFlushInPrimaryRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2328">triggerFlushInPrimaryRegion</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;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2327">triggerFlushInPrimaryRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block">Trigger a flush in the primary region replica if this region is a secondary replica. Does not
  block this thread. See RegionReplicaFlushHandler for details.</div>
 </li>
@@ -3190,7 +3190,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>getRSRpcServices</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2360">getRSRpcServices</a>()</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2359">getRSRpcServices</a>()</pre>
 </li>
 </ul>
 <a name="abort-java.lang.String-java.lang.Throwable-">
@@ -3199,7 +3199,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcSe
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2371">abort</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;reason,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2370">abort</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;reason,
                   <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;cause)</pre>
 <div class="block">Cause the server to exit without closing the regions it is serving, the log it is using and
  without notifying the master. Used unit testing and on catastrophic events such as HDFS is
@@ -3221,7 +3221,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcSe
 <li class="blockList">
 <h4>kill</h4>
 <pre>@InterfaceAudience.Private
-protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2422">kill</a>()</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2421">kill</a>()</pre>
 </li>
 </ul>
 <a name="scheduleAbortTimer--">
@@ -3230,7 +3230,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>scheduleAbortTimer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2428">scheduleAbortTimer</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2427">scheduleAbortTimer</a>()</pre>
 </li>
 </ul>
 <a name="stopServiceThreads--">
@@ -3239,7 +3239,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2451">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2450">stopServiceThreads</a>()</pre>
 <div class="block">Wait on all threads to finish. Presumption is that all closes and stops have already been
  called.</div>
 </li>
@@ -3250,7 +3250,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSourceService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2481">getReplicationSourceService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2480">getReplicationSourceService</a>()</pre>
 <div class="block">Returns Return the object that implements the replication source executorService.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3264,7 +3264,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSinkService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2486">getReplicationSinkService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2485">getReplicationSinkService</a>()</pre>
 <div class="block">Returns Return the object that implements the replication sink executorService.</div>
 </li>
 </ul>
@@ -3274,7 +3274,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2496">createRegionServerStatusStub</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2495">createRegionServerStatusStub</a>()</pre>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh
  connection, the current rssStub must be null. Method will block until a master is available.
  You can break from this block by requesting the server stop.</div>
@@ -3291,7 +3291,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
 <pre>@InterfaceAudience.Private
-protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2509">createRegionServerStatusStub</a>(boolean&nbsp;refresh)</pre>
+protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2508">createRegionServerStatusStub</a>(boolean&nbsp;refresh)</pre>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh
  connection, the current rssStub must be null. Method will block until a master is available.
  You can break from this block by requesting the server stop.</div>
@@ -3309,7 +3309,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>keepLooping</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2572">keepLooping</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2571">keepLooping</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if we should break loop because cluster is going down or this server has been
@@ -3323,7 +3323,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>reportForDuty</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2581">reportForDuty</a>()
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2580">reportForDuty</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>
@@ -3337,7 +3337,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastSequenceId</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2627">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2626">getLastSequenceId</a>(byte[]&nbsp;encodedRegionName)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html#getLastSequenceId-byte:A-">getLastSequenceId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LastSequenceId.html" title="interface in org.apache.hadoop.hbase.regionserver">LastSequenceId</a></code></dd>
@@ -3355,7 +3355,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>closeMetaTableRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2657">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2656">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Close meta region if we carry it</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -3369,7 +3369,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>closeUserRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2683">closeUserRegions</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2682">closeUserRegions</a>(boolean&nbsp;abort)</pre>
 <div class="block">Schedule closes on all user regions. Should be safe calling multiple times because it wont'
  close regions that are already closed or that are closing.</div>
 <dl>
@@ -3384,7 +3384,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegions</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apac [...]
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apac [...]
 </li>
 </ul>
 <a name="getNumberOfOnlineRegions--">
@@ -3393,7 +3393,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumberOfOnlineRegions</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2702">getNumberOfOnlineRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2701">getNumberOfOnlineRegions</a>()</pre>
 </li>
 </ul>
 <a name="getOnlineRegionsLocalContext--">
@@ -3402,7 +3402,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsLocalContext</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2710">getOnlineRegionsLocalContext</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2709">getOnlineRegionsLocalContext</a>()</pre>
 <div class="block">For tests, web ui and metrics. This method will only work if HRegionServer is in the same JVM
  as client; HRegion cannot be serialized to cross an rpc.</div>
 </li>
@@ -3413,7 +3413,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2716">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2715">addRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">MutableOnlineRegions</a></code></span></div>
 <div class="block">Add to online regions.</div>
 <dl>
@@ -3428,7 +3428,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2721">addRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2720">addRegion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ [...]
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                        long&nbsp;size)</pre>
 </li>
@@ -3439,7 +3439,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getCopyOfOnlineRegionsSortedByOffHeapSize</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<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/hba [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<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/hba [...]
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>A new Map of online regions sorted by region off-heap size with the first entry being
@@ -3453,7 +3453,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getCopyOfOnlineRegionsSortedByOnHeapSize</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<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/hba [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<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/hba [...]
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>A new Map of online regions sorted by region heap size with the first entry being the
@@ -3467,7 +3467,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushRequester</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2759">getFlushRequester</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2758">getFlushRequester</a>()</pre>
 <div class="block">Returns reference to FlushRequester</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -3484,7 +3484,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionRequestor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2764">getCompactionRequestor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2763">getCompactionRequestor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getCompactionRequestor--">getCompactionRequestor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -3500,7 +3500,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getLeaseManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2769">getLeaseManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2768">getLeaseManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getLeaseManager--">RegionServerServices</a></code></span></div>
 <div class="block">Returns The RegionServer's "Leases" service</div>
 <dl>
@@ -3515,7 +3515,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>isDataFileSystemOk</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2774">isDataFileSystemOk</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2773">isDataFileSystemOk</a>()</pre>
 <div class="block">Returns <code>true</code> when the data file system is available, <code>false</code> otherwise.</div>
 </li>
 </ul>
@@ -3525,7 +3525,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2778">getRegionServerCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2777">getRegionServerCoprocessorHost</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionInRS--">
@@ -3534,7 +3534,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionsInTransitionInRS</h4>
-<pre>public&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;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2783">getRegionsInTransitionInRS</a>()</pre>
+<pre>public&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;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2782">getRegionsInTransitionInRS</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionsInTransitionInRS--">RegionServerServices</a></code></span></div>
 <div class="block">Get the regions that are currently being opened or closed in the RS</div>
 <dl>
@@ -3551,7 +3551,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerRpcQuotaManager</h4>
-<pre>public&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/HRegionServer.html#line.2788">getRegionServerRpcQuotaManager</a>()</pre>
+<pre>public&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/HRegionServer.html#line.2787">getRegionServerRpcQuotaManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerRpcQuotaManager--">RegionServerServices</a></code></span></div>
 <div class="block">Returns RegionServer's instance of <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas"><code>RegionServerRpcQuotaManager</code></a></div>
 <dl>
@@ -3566,7 +3566,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createNewReplicationInstance</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2798">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2797">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server,
                                                  org.apache.hadoop.fs.FileSystem&nbsp;walFs,
                                                  org.apache.hadoop.fs.Path&nbsp;walDir,
@@ -3586,7 +3586,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>newReplicationInstance</h4>
-<pre>private static&nbsp;&lt;T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2824">newReplicationInstance</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&n [...]
+<pre>private static&nbsp;&lt;T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>&gt;&nbsp;T&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2823">newReplicationInstance</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&n [...]
                                                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;xface,
                                                                        org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;server,
@@ -3607,7 +3607,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalGroupsReplicationStatus</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>,<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus</a>&gt;&nbsp; [...]
+<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>,<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus</a>&gt;&nbsp; [...]
 </li>
 </ul>
 <a name="constructRegionServer-java.lang.Class-org.apache.hadoop.conf.Configuration-">
@@ -3616,7 +3616,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>constructRegionServer</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2856">constructRegionServer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/had [...]
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2855">constructRegionServer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/had [...]
                                            org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Utility for constructing an instance of the passed HRegionServer class.</div>
 </li>
@@ -3627,7 +3627,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2871">main</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;args)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2870">main</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;args)</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegionServerCommandLine</code></a></dd>
@@ -3640,7 +3640,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegions</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;<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/HRegionServer.html#line.2892">getRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title [...]
+<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;<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/HRegionServer.html#line.2891">getRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title [...]
 <div class="block">Gets the online regions of the specified table. This method looks at the in-memory
  onlineRegions. It does not go to <code>hbase:meta</code>. Only returns <em>online</em> regions.
  If a region on this table has been closed during a disable, etc., it will not be included in
@@ -3664,7 +3664,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegions</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;<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/HRegionServer.html#line.2906">getRegions</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;<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/HRegionServer.html#line.2905">getRegions</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/OnlineRegions.html#getRegions--">OnlineRegions</a></code></span></div>
 <div class="block">Get all online regions in this RS.</div>
 <dl>
@@ -3683,7 +3683,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineTables</h4>
-<pre>public&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2919">getOnlineTables</a>()</pre>
+<pre>public&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="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2918">getOnlineTables</a>()</pre>
 <div class="block">Gets the online tables in this RS. This method looks at the in-memory onlineRegions.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -3697,7 +3697,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerCoprocessors</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/HRegionServer.html#line.2929">getRegionServerCoprocessors</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2928">getRegionServerCoprocessors</a>()</pre>
 </li>
 </ul>
 <a name="closeRegionIgnoreErrors-org.apache.hadoop.hbase.client.RegionInfo-boolean-">
@@ -3706,7 +3706,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionIgnoreErrors</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2957">closeRegionIgnoreErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2956">closeRegionIgnoreErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                      boolean&nbsp;abort)</pre>
 <div class="block">Try to close the region, logs a warning on failure but continues.</div>
 <dl>
@@ -3721,7 +3721,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2988">closeRegion</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;encodedName,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2987">closeRegion</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;encodedName,
                               boolean&nbsp;abort,
                               <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination)
                        throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
@@ -3755,7 +3755,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegion</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/HRegionServer.html#line.3055">getOnlineRegion</a>(byte[]&nbsp;regionName)</pre>
+<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/HRegionServer.html#line.3054">getOnlineRegion</a>(byte[]&nbsp;regionName)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>HRegion for the passed binary <code>regionName</code> or null if named region is not
@@ -3769,7 +3769,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <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/HRegionServer.html#line.3061">getRegion</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;encodedRegionName)</pre>
+<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/HRegionServer.html#line.3060">getRegion</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;encodedRegionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/OnlineRegions.html#getRegion-java.lang.String-">OnlineRegions</a></code></span></div>
 <div class="block">Return <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver"><code>Region</code></a> instance. Only works if caller is in same context, in same JVM. Region is
  not serializable.</div>
@@ -3790,7 +3790,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3066">removeRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3065">removeRegion</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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html#removeRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.ServerName-">MutableOnlineRegions</a></code></span></div>
 <div class="block">Removes the given Region from the list of onlineRegions.</div>
@@ -3811,7 +3811,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegion</h4>
-<pre>protected&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/HRegionServer.html#line.3096">getRegion</a>(byte[]&nbsp;regionName)
+<pre>protected&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/HRegionServer.html#line.3095">getRegion</a>(byte[]&nbsp;regionName)
                      throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
 <div class="block">Protected Utility method for safely obtaining an HRegion handle.</div>
 <dl>
@@ -3830,7 +3830,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionByEncodedName</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/HRegionServer.html#line.3101">getRegionByEncodedName</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;encodedRegionName)
+<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/HRegionServer.html#line.3100">getRegionByEncodedName</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;encodedRegionName)
                                throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3844,7 +3844,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionByEncodedName</h4>
-<pre>private&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/HRegionServer.html#line.3105">getRegionByEncodedName</a>(byte[]&nbsp;regionName,
+<pre>private&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/HRegionServer.html#line.3104">getRegionByEncodedName</a>(byte[]&nbsp;regionName,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)
                                 throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
 <dl>
@@ -3859,7 +3859,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanup</h4>
-<pre>private&nbsp;<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;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3133">cleanup</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;t,
+<pre>private&nbsp;<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;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3132">cleanup</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;t,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <div class="block">Cleanup after Throwable caught invoking method. Converts <code>t</code> to IOE if it isn't
  already.</div>
@@ -3878,7 +3878,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>convertThrowableToIOE</h4>
-<pre>private&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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3155">convertThrowableToIOE</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;t,
+<pre>private&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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3154">convertThrowableToIOE</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;t,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -3894,7 +3894,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFileSystem</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3166">checkFileSystem</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3165">checkFileSystem</a>()</pre>
 <div class="block">Checks to see if the file system is still accessible. If not, sets abortRequested and
  stopRequested</div>
 <dl>
@@ -3909,7 +3909,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>updateRegionFavoredNodesMapping</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3179">updateRegionFavoredNodesMapping</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;encodedRegionName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3178">updateRegionFavoredNodesMapping</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;encodedRegionName,
                                             <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.ServerName&gt;&nbsp;favoredNodes)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.html#updateRegionFavoredNodesMapping-java.lang.String-java.util.List-">FavoredNodesForRegion</a></code></span></div>
 <div class="block">Used to update the favored nodes mapping when required.</div>
@@ -3925,7 +3925,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFavoredNodesForRegion</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/HRegionServer.html#line.3197">getFavoredNodesForRegion</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;encodedRegionName)</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/HRegionServer.html#line.3196">getFavoredNodesForRegion</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;encodedRegionName)</pre>
 <div class="block">Return the favored nodes for a region given its encoded name. Look at the comment around
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#regionFavoredNodesMap"><code>regionFavoredNodesMap</code></a> on why we convert to InetSocketAddress[] here.</div>
 <dl>
@@ -3944,7 +3944,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3202">getNonceManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3201">getNonceManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getNonceManager--">RegionServerServices</a></code></span></div>
 <div class="block">Only required for "old" log replay; if it's removed, remove this.</div>
 <dl>
@@ -3961,7 +3961,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>addToMovedRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3230">addToMovedRegions</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;encodedName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3229">addToMovedRegions</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;encodedName,
                                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination,
                                long&nbsp;closeSeqNum,
                                boolean&nbsp;selfMove)</pre>
@@ -3973,7 +3973,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>removeFromMovedRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3241">removeFromMovedRegions</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;encodedName)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3240">removeFromMovedRegions</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;encodedName)</pre>
 </li>
 </ul>
 <a name="getMovedRegion-java.lang.String-">
@@ -3983,7 +3983,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <li class="blockList">
 <h4>getMovedRegion</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3246">getMovedRegion</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;encodedRegionName)</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3245">getMovedRegion</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;encodedRegionName)</pre>
 </li>
 </ul>
 <a name="movedRegionCacheExpiredTime--">
@@ -3993,7 +3993,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion
 <li class="blockList">
 <h4>movedRegionCacheExpiredTime</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3251">movedRegionCacheExpiredTime</a>()</pre>
+public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3250">movedRegionCacheExpiredTime</a>()</pre>
 </li>
 </ul>
 <a name="getMyEphemeralNodePath--">
@@ -4002,7 +4002,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getMyEphemeralNodePath</h4>
-<pre>private&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/HRegionServer.html#line.3255">getMyEphemeralNodePath</a>()</pre>
+<pre>private&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/HRegionServer.html#line.3254">getMyEphemeralNodePath</a>()</pre>
 </li>
 </ul>
 <a name="isHealthCheckerConfigured--">
@@ -4011,7 +4011,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>isHealthCheckerConfigured</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3259">isHealthCheckerConfigured</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3258">isHealthCheckerConfigured</a>()</pre>
 </li>
 </ul>
 <a name="getCompactSplitThread--">
@@ -4020,7 +4020,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactSplitThread</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3265">getCompactSplitThread</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3264">getCompactSplitThread</a>()</pre>
 <div class="block">Returns the underlying <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver"><code>CompactSplit</code></a> for the servers</div>
 </li>
 </ul>
@@ -4030,7 +4030,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>execRegionServerService</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3269">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3268">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;serviceRequest)
                                                                                                            throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -4045,7 +4045,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCache</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3313">getBlockCache</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3312">getBlockCache</a>()</pre>
 <div class="block">May be null if this is a master which not carry table.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4061,7 +4061,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCache</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3322">getMobFileCache</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3321">getMobFileCache</a>()</pre>
 <div class="block">May be null if this is a master which not carry table.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4077,7 +4077,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionBlockCache</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3326">clearRegionBlockCache</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3325">clearRegionBlockCache</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 </li>
 </ul>
 <a name="getCompactionPressure--">
@@ -4086,7 +4086,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionPressure</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3339">getCompactionPressure</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3338">getCompactionPressure</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getCompactionPressure--">getCompactionPressure</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -4105,7 +4105,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeapMemoryManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3353">getHeapMemoryManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3352">getHeapMemoryManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getHeapMemoryManager--">RegionServerServices</a></code></span></div>
 <div class="block">Returns heap memory manager instance</div>
 <dl>
@@ -4120,7 +4120,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreFlusher</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3357">getMemStoreFlusher</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3356">getMemStoreFlusher</a>()</pre>
 </li>
 </ul>
 <a name="walRollRequestFinished--">
@@ -4130,7 +4130,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <li class="blockList">
 <h4>walRollRequestFinished</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3366">walRollRequestFinished</a>()</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3365">walRollRequestFinished</a>()</pre>
 <div class="block">For testing</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4144,7 +4144,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushThroughputController</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3371">getFlushThroughputController</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3370">getFlushThroughputController</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushThroughputController--">RegionServerServices</a></code></span></div>
 <div class="block">Returns the controller to avoid flush too fast</div>
 <dl>
@@ -4159,7 +4159,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushPressure</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3376">getFlushPressure</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3375">getFlushPressure</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushPressure--">getFlushPressure</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
@@ -4176,7 +4176,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3385">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3384">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>
@@ -4192,7 +4192,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetrics</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3408">getMetrics</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3407">getMetrics</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getMetrics--">RegionServerServices</a></code></span></div>
 <div class="block">Returns the metrics tracker for the region server</div>
 <dl>
@@ -4207,7 +4207,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getSecureBulkLoadManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3413">getSecureBulkLoadManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3412">getSecureBulkLoadManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getSecureBulkLoadManager--">RegionServerServices</a></code></span></div>
 <div class="block">Returns RegionServer's instance of <a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver"><code>SecureBulkLoadManager</code></a></div>
 <dl>
@@ -4222,7 +4222,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>regionLock</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3418">regionLock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionIn [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3417">regionLock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionIn [...]
                              <a href="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;description,
                              <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a>&nbsp;abort)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#regionLock-java.util.List-java.lang.String-org.apache.hadoop.hbase.Abortable-">RegionServerServices</a></code></span></div>
@@ -4239,7 +4239,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>unassign</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3426">unassign</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3425">unassign</a>(byte[]&nbsp;regionName)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#unassign-byte:A-">RegionServerServices</a></code></span></div>
 <div class="block">Unassign the given region from the current regionserver and assign it randomly. Could still be
@@ -4262,7 +4262,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerSpaceQuotaManager</h4>
-<pre>public&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/HRegionServer.html#line.3431">getRegionServerSpaceQuotaManager</a>()</pre>
+<pre>public&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/HRegionServer.html#line.3430">getRegionServerSpaceQuotaManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerSpaceQuotaManager--">RegionServerServices</a></code></span></div>
 <div class="block">Returns RegionServer's instance of <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas"><code>RegionServerSpaceQuotaManager</code></a></div>
 <dl>
@@ -4277,7 +4277,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>reportFileArchivalForQuotas</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3436">reportFileArchivalForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3435">reportFileArchivalForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</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  [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportFileArchivalForQuotas-org.apache.hadoop.hbase.TableName-java.util.Collection-">RegionServerServices</a></code></span></div>
 <div class="block">Reports a collection of files, and their sizes, that belonged to the given <code>table</code> were
@@ -4299,7 +4299,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>executeProcedure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3472">executeProcedure</a>(long&nbsp;procId,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3471">executeProcedure</a>(long&nbsp;procId,
                       <a href="../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a>&nbsp;callable)</pre>
 </li>
 </ul>
@@ -4309,7 +4309,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>remoteProcedureComplete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3476">remoteProcedureComplete</a>(long&nbsp;procId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3475">remoteProcedureComplete</a>(long&nbsp;procId,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 </li>
 </ul>
@@ -4319,7 +4319,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>reportProcedureDone</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3480">reportProcedureDone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest&nbsp;request)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3479">reportProcedureDone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest&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>
@@ -4333,7 +4333,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>submitRegionProcedure</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3514">submitRegionProcedure</a>(long&nbsp;procId)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3513">submitRegionProcedure</a>(long&nbsp;procId)</pre>
 <div class="block">Will ignore the open/close region procedures which already submitted or executed. When master
  had unfinished open/close region procedure and restarted, new active master may send duplicate
  open/close region request to regionserver. The open/close request is submitted to a thread pool
@@ -4358,7 +4358,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>finishRegionProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3536">finishRegionProcedure</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3535">finishRegionProcedure</a>(long&nbsp;procId)</pre>
 <div class="block">See <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#submitRegionProcedure-long-"><code>submitRegionProcedure(long)</code></a>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -4373,7 +4373,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>getCompactedHFilesDischarger</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3560">getCompactedHFilesDischarger</a>()</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3559">getCompactedHFilesDischarger</a>()</pre>
 </li>
 </ul>
 <a name="getRetryPauseTime--">
@@ -4383,7 +4383,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Compact
 <li class="blockList">
 <h4>getRetryPauseTime</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3569">getRetryPauseTime</a>()</pre>
+public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3568">getRetryPauseTime</a>()</pre>
 <div class="block">Return pause time configured in <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME"><code>HConstants.HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME</code></a>}</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4397,7 +4397,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveMaster</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3574">getActiveMaster</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3573">getActiveMaster</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionRegistryEndpoint.html#getActiveMaster--">ConnectionRegistryEndpoint</a></code></span></div>
 <div class="block">Get active master address.</div>
 <dl>
@@ -4412,7 +4412,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getBackupMasters</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3579">getBackupMasters</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;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3578">getBackupMasters</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionRegistryEndpoint.html#getBackupMasters--">ConnectionRegistryEndpoint</a></code></span></div>
 <div class="block">Get backup masters address.</div>
 <dl>
@@ -4427,7 +4427,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getBootstrapNodes</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3584">getBootstrapNodes</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3583">getBootstrapNodes</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionRegistryEndpoint.html#getBootstrapNodes--">ConnectionRegistryEndpoint</a></code></span></div>
 <div class="block">Get a iterator of the available bootstrap nodes.</div>
 <dl>
@@ -4442,7 +4442,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetaLocations</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;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3589">getMetaLocations</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;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3588">getMetaLocations</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionRegistryEndpoint.html#getMetaLocations--">ConnectionRegistryEndpoint</a></code></span></div>
 <div class="block">Get the location of meta regions.</div>
 <dl>
@@ -4457,7 +4457,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createNamedQueueRecord</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3594">createNamedQueueRecord</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3593">createNamedQueueRecord</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#createNamedQueueRecord--">createNamedQueueRecord</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -4470,7 +4470,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterMode</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3599">clusterMode</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3598">clusterMode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#clusterMode--">clusterMode</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -4484,7 +4484,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <li class="blockList">
 <h4>getBrokenStoreFileCleaner</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BrokenStoreFileCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">BrokenStoreFileCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3606">getBrokenStoreFileCleaner</a>()</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BrokenStoreFileCleaner.html" title="class in org.apache.hadoop.hbase.regionserver">BrokenStoreFileCleaner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3605">getBrokenStoreFileCleaner</a>()</pre>
 </li>
 </ul>
 <a name="getRSMobFileCleanerChore--">
@@ -4494,7 +4494,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BrokenS
 <li class="blockList">
 <h4>getRSMobFileCleanerChore</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/RSMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">RSMobFileCleanerChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3611">getRSMobFileCleanerChore</a>()</pre>
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/RSMobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">RSMobFileCleanerChore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3610">getRSMobFileCleanerChore</a>()</pre>
 </li>
 </ul>
 <a name="getRsSnapshotVerifier--">
@@ -4503,7 +4503,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/RSMobFileCleaner
 <ul class="blockList">
 <li class="blockList">
 <h4>getRsSnapshotVerifier</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.regionserver">RSSnapshotVerifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3615">getRsSnapshotVerifier</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSSnapshotVerifier.html" title="class in org.apache.hadoop.hbase.regionserver">RSSnapshotVerifier</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3614">getRsSnapshotVerifier</a>()</pre>
 </li>
 </ul>
 <a name="stopChores--">
@@ -4512,7 +4512,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/RSMobFileCleaner
 <ul class="blockList">
 <li class="blockList">
 <h4>stopChores</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3620">stopChores</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3619">stopChores</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html#stopChores--">stopChores</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/HBaseServerBase.html" title="class in org.apache.hadoop.hbase">HBaseServerBase</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a>&gt;</code></dd>
@@ -4525,7 +4525,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/RSMobFileCleaner
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRegionReplicationBufferManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/regionreplication/RegionReplicationBufferManager.html" title="class in org.apache.hadoop.hbase.regionserver.regionreplication">RegionReplicationBufferManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3636">getRegionReplicationBufferManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/regionreplication/RegionReplicationBufferManager.html" title="class in org.apache.hadoop.hbase.regionserver.regionreplication">RegionReplicationBufferManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3635">getRegionReplicationBufferManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionReplicationBufferManager--">getRegionReplicationBufferManager</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionServerServices</a></code></dd>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 539bae52cdf..9ffb56679f0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
@@ -215,3436 +215,3435 @@
 <span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad;<a name="line.208"></a>
 <span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.Coprocessor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.Coprocessor.Builder;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameStringPair;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdResponse;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>/**<a name="line.232"></a>
-<span class="sourceLineNo">233</span> * HRegionServer makes a set of HRegions available to clients. It checks in with the HMaster. There<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * are many HRegionServers in a single HBase deployment.<a name="line.234"></a>
-<span class="sourceLineNo">235</span> */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>@SuppressWarnings({ "deprecation" })<a name="line.237"></a>
-<span class="sourceLineNo">238</span>public class HRegionServer extends HBaseServerBase&lt;RSRpcServices&gt;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  implements RegionServerServices, LastSequenceId {<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private static final Logger LOG = LoggerFactory.getLogger(HRegionServer.class);<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * For testing only! Set to true to skip notifying region assignment to master .<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  @InterfaceAudience.Private<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "MS_SHOULD_BE_FINAL")<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public static boolean TEST_SKIP_REPORTING_TRANSITION = false;<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * A map from RegionName to current action in progress. Boolean value indicates: true - if open<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * region action in progress false - if close region action in progress<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  private final ConcurrentMap&lt;byte[], Boolean&gt; regionsInTransitionInRS =<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    new ConcurrentSkipListMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<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>   * Used to cache the open/close region procedures which already submitted. See<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * {@link #submitRegionProcedure(long)}.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private final ConcurrentMap&lt;Long, Long&gt; submittedRegionProcedures = new ConcurrentHashMap&lt;&gt;();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * Used to cache the open/close region procedures which already executed. See<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * {@link #submitRegionProcedure(long)}.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private final Cache&lt;Long, Long&gt; executedRegionProcedures =<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    CacheBuilder.newBuilder().expireAfterAccess(600, TimeUnit.SECONDS).build();<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Used to cache the moved-out regions<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private final Cache&lt;String, MovedRegionInfo&gt; movedRegionInfoCache = CacheBuilder.newBuilder()<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    .expireAfterWrite(movedRegionCacheExpiredTime(), TimeUnit.MILLISECONDS).build();<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private MemStoreFlusher cacheFlusher;<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>  private HeapMemoryManager hMemManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  // Replication services. If no replication, this handler will be null.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  private boolean sameReplicationSourceAndSink;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  // Compactions<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the encoded region name.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * All access should be synchronized.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Lock for gating access to {@link #onlineRegions}. TODO: If this map is gated by a lock, does it<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * need to be a ConcurrentHashMap?<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Map of encoded region names to the DataNode locations they should be hosted on We store the<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * value as Address since InetSocketAddress is required by the HDFS API (create() that takes<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * favored nodes as hints for placing file blocks). We could have used ServerName here as the<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * value class, but we'd need to convert it to InetSocketAddress at some point before the HDFS API<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * call, and it seems a bit weird to store ServerName since ServerName refers to RegionServers and<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * here we really mean DataNode locations. We don't store it as InetSocketAddress here because the<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * conversion on demand from Address to InetSocketAddress will guarantee the resolution results<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * will be fresh when we need it.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private final Map&lt;String, Address[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private LeaseManager leaseManager;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private volatile boolean dataFsOk;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  // Default abort timeout is 1200 seconds for safe<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  // Will run this task when abort timeout<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  // A state before we go into stopped state. At this stage we're closing user<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  // space regions.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private boolean stopping = false;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private volatile boolean killed = false;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private final int threadWakeFrequency;<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private final int compactionCheckFrequency;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private final int flushCheckFrequency;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Stub to do region server status calls against the master.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private RpcClient rpcClient;<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private JvmPauseMonitor pauseMonitor;<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private RSSnapshotVerifier rsSnapshotVerifier;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  /** region server process name */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public static final String REGIONSERVER = "regionserver";<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private MetricsRegionServer metricsRegionServer;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * Check for compactions requests.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  private ScheduledChore compactionChecker;<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   * Check for flushes<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   */<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  private ScheduledChore periodicFlusher;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private volatile WALFactory walFactory;<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private LogRoller walRoller;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  // A thread which calls reportProcedureDone<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  // flag set after we're done setting up server threads<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  // master address tracker<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  // Log Splitting Worker<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private SplitLogWorker splitLogWorker;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private final int shortOperationTimeout;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  // Time to pause if master says 'please hold'<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private final long retryPauseTime;<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private NamedQueueServiceChore namedQueueServiceChore = null;<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  // Block cache<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private BlockCache blockCache;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  // The cache for mob files<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private MobFileCache mobFileCache;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  /** The health check chore. */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private HealthCheckChore healthCheckChore;<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /** The Executor status collect chore. */<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  private ExecutorStatusChore executorStatusChore;<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  /** The nonce manager chore. */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private ScheduledChore nonceManagerChore;<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @deprecated since 2.4.0 and will be removed in 4.0.0. Use<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   *             {@link HRegionServer#UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY} instead.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-24667"&gt;HBASE-24667&lt;/a&gt;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  @Deprecated<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    "hbase.regionserver.hostname.disable.master.reversedns";<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>  /**<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * HBASE-18226: This config and hbase.unsafe.regionserver.hostname are mutually exclusive.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Exception will be thrown if both are used.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  final static String UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    "hbase.unsafe.regionserver.hostname.disable.master.reversedns";<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Unique identifier for the cluster we are a part of.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private String clusterId;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>  // chore for refreshing store files for secondary regions<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  private StorefileRefresherChore storefileRefresher;<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>  private volatile RegionServerCoprocessorHost rsHost;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /**<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent in the<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * case where client doesn't receive the response from a successful operation and retries. We<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * track the successful ops for some time via a nonce sent by client and handle duplicate<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * operations (currently, by failing them; in future we might use MVCC to return result). Nonces<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * are also recovered from WAL during, recovery; however, the caveats (from HBASE-3787) are: - WAL<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * recovery is optimized, and under high load we won't read nearly nonce-timeout worth of past<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * records. If we don't read the records, we don't read and recover the nonces. Some WALs within<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * nonce-timeout at recovery may not even be present due to rolling/cleanup. - There's no WAL<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * recovery during normal region move, so nonces will not be transfered. We can have separate<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * additional "Nonce WAL". It will just contain bunch of numbers and won't be flushed on main path<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * - because WAL itself also contains nonces, if we only flush it before memstore flush, for a<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * given nonce we will either see it in the WAL (if it was never flushed to disk, it will be part<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * of recovery), or we'll see it as part of the nonce log (or both occasionally, which doesn't<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * matter). Nonce log file can be deleted after the latest nonce in it expired. It can also be<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * recovered during move.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  final ServerNonceManager nonceManager;<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private BrokenStoreFileCleaner brokenStoreFileCleaner;<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>  private RSMobFileCleanerChore rsMobFileCleanerChore;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  @InterfaceAudience.Private<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private volatile ThroughputController flushThroughputController;<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private BootstrapNodeManager bootstrapNodeManager;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * True if this RegionServer is coming up in a cluster where there is no Master; means it needs to<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * just come up and make do without a Master to talk to: e.g. in test or HRegionServer is doing<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * other than its usual duties: e.g. as an hollowed-out host whose only purpose is as a<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * Replication-stream sink; see HBASE-18846 for more. TODO: can this replace<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  private final boolean masterless;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /** regionserver codec list **/<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>  // A timer to shutdown the process if abort takes too long<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  private Timer abortMonitor;<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  private RegionReplicationBufferManager regionReplicationBufferManager;<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  /*<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * Chore that creates replication marker rows.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   */<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private ReplicationMarkerChore replicationMarkerChore;<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * Starts a HRegionServer at the default location.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * &lt;p/&gt;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Don't start any services or managers in here in the Constructor. Defer till after we register<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * with the Master as much as possible. See {@link #startServices}.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    super(conf, "RegionServer"); // thread name<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    final Span span = TraceUtil.createSpan("HRegionServer.cxtor");<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.dataFsOk = true;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.masterless = !clusterMode();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      HFile.checkHFileVersion(this.conf);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      checkCodecs(this.conf);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>      // Disable usage of meta replicas in the regionserver<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // Config'ed params<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>      this.retryPauseTime = conf.getLong(HConstants.HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME,<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>      blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      mobFileCache = new MobFileCache(conf);<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>      rsSnapshotVerifier = new RSSnapshotVerifier(conf);<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>      uncaughtExceptionHandler =<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!this.masterless) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        masterAddressTracker.start();<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        masterAddressTracker = null;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      this.rpcServices.start(zooKeeper);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      span.setStatus(StatusCode.OK);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    } catch (Throwable t) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      // cause of failed startup is lost.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      TraceUtil.setError(span, t);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      LOG.error("Failed construction RegionServer", t);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      throw t;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      span.end();<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // HMaster should override this method to load the specific config for master<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    String hostname = conf.get(UNSAFE_RS_HOSTNAME_KEY);<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    if (conf.getBoolean(UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>        String msg = UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and "<a name="line.560"></a>
-<span class="sourceLineNo">561</span>          + UNSAFE_RS_HOSTNAME_KEY + " are mutually exclusive. Do not set "<a name="line.561"></a>
-<span class="sourceLineNo">562</span>          + UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " to true while "<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          + UNSAFE_RS_HOSTNAME_KEY + " is used";<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        throw new IOException(msg);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        return rpcServices.getSocketAddress().getHostName();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    } else {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return hostname;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @Override<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected String getProcessName() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return REGIONSERVER;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  @Override<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  protected boolean canCreateBaseZNode() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    return !clusterMode();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  @Override<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  protected boolean canUpdateTableDescriptor() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    return false;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>  @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  protected boolean cacheTableDescriptor() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return false;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    return new RSRpcServices(this);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>  @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  protected void configureInfoServer(InfoServer infoServer) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return RSDumpServlet.class;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>  /**<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * Used by {@link RSDumpServlet} to generate debugging information.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public void dumpRowLocks(final PrintWriter out) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    StringBuilder sb = new StringBuilder();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    for (HRegion region : getRegions()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      if (region.getLockedRows().size() &gt; 0) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        for (HRegion.RowLockContext rowLockContext : region.getLockedRows().values()) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          sb.setLength(0);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>          sb.append(region.getTableDescriptor().getTableName()).append(",")<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            .append(region.getRegionInfo().getEncodedName()).append(",");<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          sb.append(rowLockContext.toString());<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          out.println(sb);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      }<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>  @Override<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  public boolean registerService(Service instance) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    // No stacking of instances is allowed for a single executorService name<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        + " already registered, rejecting request from " + instance);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return false;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    if (LOG.isDebugEnabled()) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      LOG.debug(<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return true;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    // check to see if the codec list is available:<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    String[] codecs = c.getStrings(REGIONSERVER_CODEC, (String[]) null);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    if (codecs == null) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      return;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    }<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    for (String codec : codecs) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        throw new IOException(<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          "Compression codec " + codec + " not supported, aborting RS construction");<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>  public String getClusterId() {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    return this.clusterId;<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>  /**<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  private void preRegistrationInitialization() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    final Span span = TraceUtil.createSpan("HRegionServer.preRegistrationInitialization");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      initializeZooKeeper();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      setupClusterConnection();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      bootstrapNodeManager = new BootstrapNodeManager(asyncClusterConnection, masterAddressTracker);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      regionReplicationBufferManager = new RegionReplicationBufferManager(this);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      // Setup RPC client for master communication<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      span.setStatus(StatusCode.OK);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    } catch (Throwable t) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // Call stop if error or process will stick around for ever since server<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      // puts up non-daemon threads.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      TraceUtil.setError(span, t);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      this.rpcServices.stop();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    } finally {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      span.end();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>  /**<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * &lt;p&gt;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * Finally open long-living server short-circuit connection.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      justification = "cluster Id znode read would give us correct response")<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // Nothing to do in here if no Master in the mix.<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    if (this.masterless) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      return;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>    // Create the master address tracker, register with zk, and start it. Then<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    // block until a master is available. No point in starting up if no master<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    // running.<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.715"></a>
-<span class="sourceLineNo">716</span><a name="line.716"></a>
-<span class="sourceLineNo">717</span>    // Wait on cluster being up. Master will set this flag up in zookeeper<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // when ready.<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    if (clusterId == null) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      // Retrieve clusterId<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      // Since cluster status is now up<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // ID should have already been set by HMaster<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      try {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        if (clusterId == null) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>          this.abort("Cluster ID has not been set");<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        }<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        LOG.info("ClusterId : " + clusterId);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      } catch (KeeperException e) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      }<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    }<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    if (isStopped() || isAborted()) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      return; // No need for further initialization<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    }<a name="line.739"></a>
-<span class="sourceLineNo">740</span><a name="line.740"></a>
-<span class="sourceLineNo">741</span>    // watch for snapshots and other procedures<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    try {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      rspmHost.loadProcedures(conf);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      rspmHost.initialize(this);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    } catch (KeeperException e) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Utilty method to wait indefinitely on a znode availability while checking if the region server<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * is shut down<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @param tracker znode tracker to use<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   * @throws IOException          any IO exception, plus if the RS is stopped<a name="line.755"></a>
-<span class="sourceLineNo">756</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   */<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    throws IOException, InterruptedException {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      if (this.stopped) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>  }<a name="line.765"></a>
-<span class="sourceLineNo">766</span><a name="line.766"></a>
-<span class="sourceLineNo">767</span>  /** Returns True if the cluster is up. */<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  @Override<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  public boolean isClusterUp() {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    return this.masterless<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      || (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  private void initializeReplicationMarkerChore() {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    boolean replicationMarkerEnabled =<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      conf.getBoolean(REPLICATION_MARKER_ENABLED_KEY, REPLICATION_MARKER_ENABLED_DEFAULT);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // If replication or replication marker is not enabled then return immediately.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    if (replicationMarkerEnabled) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      int period = conf.getInt(REPLICATION_MARKER_CHORE_DURATION_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span>        REPLICATION_MARKER_CHORE_DURATION_DEFAULT);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      replicationMarkerChore = new ReplicationMarkerChore(this, this, period, conf);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>    }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>  }<a name="line.783"></a>
-<span class="sourceLineNo">784</span><a name="line.784"></a>
-<span class="sourceLineNo">785</span>  /**<a name="line.785"></a>
-<span class="sourceLineNo">786</span>   * The HRegionServer sticks in this loop until closed.<a name="line.786"></a>
-<span class="sourceLineNo">787</span>   */<a name="line.787"></a>
-<span class="sourceLineNo">788</span>  @Override<a name="line.788"></a>
-<span class="sourceLineNo">789</span>  public void run() {<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    if (isStopped()) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>      LOG.info("Skipping run; stopped");<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      return;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>    }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    try {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      preRegistrationInitialization();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>    } catch (Throwable e) {<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      abort("Fatal exception during initialization", e);<a name="line.798"></a>
-<span class="sourceLineNo">799</span>    }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>    try {<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        installShutdownHook();<a name="line.803"></a>
-<span class="sourceLineNo">804</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.804"></a>
-<span class="sourceLineNo">805</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.805"></a>
-<span class="sourceLineNo">806</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.806"></a>
-<span class="sourceLineNo">807</span><a name="line.807"></a>
-<span class="sourceLineNo">808</span>        // Try and register with the Master; tell it we are here. Break if server is stopped or<a name="line.808"></a>
-<span class="sourceLineNo">809</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        // come up.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>        LOG.debug("About to register with Master.");<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        TraceUtil.trace(() -&gt; {<a name="line.813"></a>
-<span class="sourceLineNo">814</span>          RetryCounterFactory rcf =<a name="line.814"></a>
-<span class="sourceLineNo">815</span>            new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>          RetryCounter rc = rcf.create();<a name="line.816"></a>
-<span class="sourceLineNo">817</span>          while (keepLooping()) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>            RegionServerStartupResponse w = reportForDuty();<a name="line.818"></a>
-<span class="sourceLineNo">819</span>            if (w == null) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>              long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.820"></a>
-<span class="sourceLineNo">821</span>              LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.821"></a>
-<span class="sourceLineNo">822</span>              this.sleeper.sleep(sleepTime);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>            } else {<a name="line.823"></a>
-<span class="sourceLineNo">824</span>              handleReportForDutyResponse(w);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>              break;<a name="line.825"></a>
-<span class="sourceLineNo">826</span>            }<a name="line.826"></a>
-<span class="sourceLineNo">827</span>          }<a name="line.827"></a>
-<span class="sourceLineNo">828</span>        }, "HRegionServer.registerWithMaster");<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        TraceUtil.trace(() -&gt; {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>          // start the snapshot handler and other procedure handlers,<a name="line.833"></a>
-<span class="sourceLineNo">834</span>          // since the server is ready to run<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          if (this.rspmHost != null) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>            this.rspmHost.start();<a name="line.836"></a>
-<span class="sourceLineNo">837</span>          }<a name="line.837"></a>
-<span class="sourceLineNo">838</span>          // Start the Quota Manager<a name="line.838"></a>
-<span class="sourceLineNo">839</span>          if (this.rsQuotaManager != null) {<a name="line.839"></a>
-<span class="sourceLineNo">840</span>            rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.840"></a>
-<span class="sourceLineNo">841</span>          }<a name="line.841"></a>
-<span class="sourceLineNo">842</span>          if (this.rsSpaceQuotaManager != null) {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>            this.rsSpaceQuotaManager.start();<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          }<a name="line.844"></a>
-<span class="sourceLineNo">845</span>        }, "HRegionServer.startup");<a name="line.845"></a>
-<span class="sourceLineNo">846</span>      }<a name="line.846"></a>
-<span class="sourceLineNo">847</span><a name="line.847"></a>
-<span class="sourceLineNo">848</span>      // We registered with the Master. Go into run mode.<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      long lastMsg = EnvironmentEdgeManager.currentTime();<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      long oldRequestCount = -1;<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      // The main run loop.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        if (!isClusterUp()) {<a name="line.853"></a>
-<span class="sourceLineNo">854</span>          if (onlineRegions.isEmpty()) {<a name="line.854"></a>
-<span class="sourceLineNo">855</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.855"></a>
-<span class="sourceLineNo">856</span>          } else if (!this.stopping) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>            this.stopping = true;<a name="line.857"></a>
-<span class="sourceLineNo">858</span>            LOG.info("Closing user regions");<a name="line.858"></a>
-<span class="sourceLineNo">859</span>            closeUserRegions(isAborted());<a name="line.859"></a>
-<span class="sourceLineNo">860</span>          } else {<a name="line.860"></a>
-<span class="sourceLineNo">861</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.861"></a>
-<span class="sourceLineNo">862</span>            if (allUserRegionsOffline) {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>              // Set stopped if no more write requests tp meta tables<a name="line.863"></a>
-<span class="sourceLineNo">864</span>              // since last time we went around the loop. Any open<a name="line.864"></a>
-<span class="sourceLineNo">865</span>              // meta regions will be closed on our way out.<a name="line.865"></a>
-<span class="sourceLineNo">866</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>                stop("Stopped; only catalog regions remaining online");<a name="line.867"></a>
-<span class="sourceLineNo">868</span>                break;<a name="line.868"></a>
-<span class="sourceLineNo">869</span>              }<a name="line.869"></a>
-<span class="sourceLineNo">870</span>              oldRequestCount = getWriteRequestCount();<a name="line.870"></a>
-<span class="sourceLineNo">871</span>            } else {<a name="line.871"></a>
-<span class="sourceLineNo">872</span>              // Make sure all regions have been closed -- some regions may<a name="line.872"></a>
-<span class="sourceLineNo">873</span>              // have not got it because we were splitting at the time of<a name="line.873"></a>
-<span class="sourceLineNo">874</span>              // the call to closeUserRegions.<a name="line.874"></a>
-<span class="sourceLineNo">875</span>              closeUserRegions(this.abortRequested.get());<a name="line.875"></a>
-<span class="sourceLineNo">876</span>            }<a name="line.876"></a>
-<span class="sourceLineNo">877</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.877"></a>
-<span class="sourceLineNo">878</span>          }<a name="line.878"></a>
-<span class="sourceLineNo">879</span>        }<a name="line.879"></a>
-<span class="sourceLineNo">880</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.880"></a>
-<span class="sourceLineNo">881</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.881"></a>
-<span class="sourceLineNo">882</span>          tryRegionServerReport(lastMsg, now);<a name="line.882"></a>
-<span class="sourceLineNo">883</span>          lastMsg = EnvironmentEdgeManager.currentTime();<a name="line.883"></a>
-<span class="sourceLineNo">884</span>        }<a name="line.884"></a>
-<span class="sourceLineNo">885</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>          this.sleeper.sleep();<a name="line.886"></a>
-<span class="sourceLineNo">887</span>        }<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      } // for<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    } catch (Throwable t) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      if (!rpcServices.checkOOME(t)) {<a name="line.890"></a>
-<span class="sourceLineNo">891</span>        String prefix = t instanceof YouAreDeadException ? "" : "Unhandled: ";<a name="line.891"></a>
-<span class="sourceLineNo">892</span>        abort(prefix + t.getMessage(), t);<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      }<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    }<a name="line.894"></a>
-<span class="sourceLineNo">895</span><a name="line.895"></a>
-<span class="sourceLineNo">896</span>    final Span span = TraceUtil.createSpan("HRegionServer exiting main loop");<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      if (this.leaseManager != null) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>        this.leaseManager.closeAfterLeasesExpire();<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      }<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      if (this.splitLogWorker != null) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        splitLogWorker.stop();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      stopInfoServer();<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      // Send cache a shutdown.<a name="line.905"></a>
-<span class="sourceLineNo">906</span>      if (blockCache != null) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>        blockCache.shutdown();<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      if (mobFileCache != null) {<a name="line.909"></a>
-<span class="sourceLineNo">910</span>        mobFileCache.shutdown();<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      }<a name="line.911"></a>
-<span class="sourceLineNo">912</span><a name="line.912"></a>
-<span class="sourceLineNo">913</span>      // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      // TODO: Should we check they are alive? If OOME could have exited already<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      if (this.hMemManager != null) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>        this.hMemManager.stop();<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      if (this.cacheFlusher != null) {<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        this.cacheFlusher.interruptIfNecessary();<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      }<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      if (this.compactSplitThread != null) {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>        this.compactSplitThread.interruptIfNecessary();<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      }<a name="line.923"></a>
-<span class="sourceLineNo">924</span><a name="line.924"></a>
-<span class="sourceLineNo">925</span>      // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      if (rspmHost != null) {<a name="line.926"></a>
-<span class="sourceLineNo">927</span>        rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      }<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>      if (this.killed) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>        // Just skip out w/o closing regions. Used when testing.<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      } else if (abortRequested.get()) {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>        if (this.dataFsOk) {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>          closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.934"></a>
-<span class="sourceLineNo">935</span>        }<a name="line.935"></a>
-<span class="sourceLineNo">936</span>        LOG.info("aborting server " + this.serverName);<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      } else {<a name="line.937"></a>
-<span class="sourceLineNo">938</span>        closeUserRegions(abortRequested.get());<a name="line.938"></a>
-<span class="sourceLineNo">939</span>        LOG.info("stopping server " + this.serverName);<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      }<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      regionReplicationBufferManager.stop();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      closeClusterConnection();<a name="line.942"></a>
-<span class="sourceLineNo">943</span>      // Closing the compactSplit thread before closing meta regions<a name="line.943"></a>
-<span class="sourceLineNo">944</span>      if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>        if (!abortRequested.get() || this.dataFsOk) {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>          if (this.compactSplitThread != null) {<a name="line.946"></a>
-<span class="sourceLineNo">947</span>            this.compactSplitThread.join();<a name="line.947"></a>
-<span class="sourceLineNo">948</span>            this.compactSplitThread = null;<a name="line.948"></a>
-<span class="sourceLineNo">949</span>          }<a name="line.949"></a>
-<span class="sourceLineNo">950</span>          closeMetaTableRegions(abortRequested.get());<a name="line.950"></a>
-<span class="sourceLineNo">951</span>        }<a name="line.951"></a>
-<span class="sourceLineNo">952</span>      }<a name="line.952"></a>
-<span class="sourceLineNo">953</span><a name="line.953"></a>
-<span class="sourceLineNo">954</span>      if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>        waitOnAllRegionsToClose(abortRequested.get());<a name="line.955"></a>
-<span class="sourceLineNo">956</span>        LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>      // Stop the quota manager<a name="line.959"></a>
-<span class="sourceLineNo">960</span>      if (rsQuotaManager != null) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>        rsQuotaManager.stop();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      }<a name="line.962"></a>
-<span class="sourceLineNo">963</span>      if (rsSpaceQuotaManager != null) {<a name="line.963"></a>
-<span class="sourceLineNo">964</span>        rsSpaceQuotaManager.stop();<a name="line.964"></a>
-<span class="sourceLineNo">965</span>        rsSpaceQuotaManager = null;<a name="line.965"></a>
-<span class="sourceLineNo">966</span>      }<a name="line.966"></a>
-<span class="sourceLineNo">967</span><a name="line.967"></a>
-<span class="sourceLineNo">968</span>      // flag may be changed when closing regions throws exception.<a name="line.968"></a>
-<span class="sourceLineNo">969</span>      if (this.dataFsOk) {<a name="line.969"></a>
-<span class="sourceLineNo">970</span>        shutdownWAL(!abortRequested.get());<a name="line.970"></a>
-<span class="sourceLineNo">971</span>      }<a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>      // Make sure the proxy is down.<a name="line.973"></a>
-<span class="sourceLineNo">974</span>      if (this.rssStub != null) {<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        this.rssStub = null;<a name="line.975"></a>
-<span class="sourceLineNo">976</span>      }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>      if (this.lockStub != null) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>        this.lockStub = null;<a name="line.978"></a>
-<span class="sourceLineNo">979</span>      }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      if (this.rpcClient != null) {<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        this.rpcClient.close();<a name="line.981"></a>
-<span class="sourceLineNo">982</span>      }<a name="line.982"></a>
-<span class="sourceLineNo">983</span>      if (this.leaseManager != null) {<a name="line.983"></a>
-<span class="sourceLineNo">984</span>        this.leaseManager.close();<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      }<a name="line.985"></a>
-<span class="sourceLineNo">986</span>      if (this.pauseMonitor != null) {<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        this.pauseMonitor.stop();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>      }<a name="line.988"></a>
-<span class="sourceLineNo">989</span><a name="line.989"></a>
-<span class="sourceLineNo">990</span>      if (!killed) {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>        stopServiceThreads();<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      }<a name="line.992"></a>
-<span class="sourceLineNo">993</span><a name="line.993"></a>
-<span class="sourceLineNo">994</span>      if (this.rpcServices != null) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>        this.rpcServices.stop();<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      }<a name="line.996"></a>
-<span class="sourceLineNo">997</span><a name="line.997"></a>
-<span class="sourceLineNo">998</span>      try {<a name="line.998"></a>
-<span class="sourceLineNo">999</span>        deleteMyEphemeralNode();<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>      } catch (KeeperException.NoNodeException nn) {<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        // pass<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>      } catch (KeeperException e) {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>        LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      // We may have failed to delete the znode at the previous step, but<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>      // we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>      ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span><a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      closeZooKeeper();<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>      closeTableDescriptors();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>      LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      span.setStatus(StatusCode.OK);<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>    } finally {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      span.end();<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    }<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>  }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>  private boolean containsMetaTableRegions() {<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>  }<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span><a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>  private boolean areAllUserRegionsOffline() {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>    if (getNumberOfOnlineRegions() &gt; 2) {<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      return false;<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    }<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    boolean allUserRegionsOffline = true;<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>        allUserRegionsOffline = false;<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>        break;<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>    return allUserRegionsOffline;<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>  /** Returns Current write count for all online regions. */<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>  private long getWriteRequestCount() {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>    long writeCount = 0;<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    }<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>    return writeCount;<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  }<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span><a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  @InterfaceAudience.Private<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    throws IOException {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    if (rss == null) {<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>      // the current server could be stopping.<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>      return;<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    }<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    final Span span = TraceUtil.createSpan("HRegionServer.tryRegionServerReport");<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      request.setLoad(sl);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      rss.regionServerReport(null, request.build());<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>      span.setStatus(StatusCode.OK);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    } catch (ServiceException se) {<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>        // This will be caught and handled as a fatal error in run()<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>        TraceUtil.setError(span, ioe);<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>        throw ioe;<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>      }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>      if (rssStub == rss) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>        rssStub = null;<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      }<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>      TraceUtil.setError(span, se);<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>      // Method blocks until new master is found or we are stopped<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      createRegionServerStatusStub(true);<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    } finally {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>      span.end();<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    }<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  }<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span><a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  /**<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>   * @param regionSizeStore The store containing region sizes<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>   */<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    if (rss == null) {<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>      // the current server could be stopping.<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>      return true;<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    }<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>    try {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>    } catch (ServiceException se) {<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>          + " This will be retried.", ioe);<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>        return true;<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>      if (rssStub == rss) {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        rssStub = null;<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      }<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>      createRegionServerStatusStub(true);<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>            return false;<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>          }<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    }<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>    return true;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>  }<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span><a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>  /**<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>   * @param rss             The stub to send to the Master<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>   * @param regionSizeStore The store containing region sizes<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>   */<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>    RegionSpaceUseReportRequest request =<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>      buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    // Record the number of size reports sent<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    if (metricsRegionServer != null) {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>  }<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span><a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>  /**<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>   * @param regionSizes The size in bytes of regions<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>   * @return The corresponding protocol buffer message.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>   */<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>    return request.build();<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>  }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span><a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>  /**<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse} protobuf<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>   * message.<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>   * @param regionInfo  The RegionInfo<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>   * @return The protocol buffer<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>   */<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    return RegionSpaceUse.newBuilder()<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      .setRegionSize(Objects.requireNonNull(sizeInBytes)).build();<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>  }<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span><a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    throws IOException {<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    // per second, and other metrics As long as metrics are part of ServerLoad it's best to use<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    // the wrapper to compute those numbers in one place.<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    // history.<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    long usedMemory = -1L;<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    long maxMemory = -1L;<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    if (usage != null) {<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>      usedMemory = usage.getUsed();<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    serverLoad.setUsedHeapMB((int) (usedMemory / 1024 / 1024));<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>    serverLoad.setReadRequestsCount(this.metricsRegionServerImpl.getReadRequestsCount());<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    serverLoad.setWriteRequestsCount(this.metricsRegionServerImpl.getWriteRequestsCount());<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    for (String coprocessor : coprocessors) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    }<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    for (HRegion region : regions) {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>      if (region.getCoprocessorHost() != null) {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).build());<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>        }<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>      }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>        .getCoprocessors()) {<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>      }<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    if (this.infoServer != null) {<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>    } else {<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>      serverLoad.setInfoServerPort(-1);<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    }<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>    MetricsUserAggregateSource userSource =<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>    if (userSource != null) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span><a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      // always refresh first to get the latest value<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      if (rLoad != null) {<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>          .getReplicationLoadSourceEntries()) {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        }<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      }<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>    } else {<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>      if (replicationSourceHandler != null) {<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>        if (rLoad != null) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>            .getReplicationLoadSourceEntries()) {<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>          }<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>        }<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      }<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>      if (replicationSinkHandler != null) {<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>        if (rLoad != null) {<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>        }<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      }<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    }<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span><a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>    TaskMonitor.get().getTasks().forEach(task -&gt; serverLoad.addTasks(ClusterStatusProtos.ServerTask<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>      .newBuilder().setDescription(task.getDescription())<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      .setStatus(task.getStatus() != null ? task.getStatus() : "")<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>      .setState(ClusterStatusProtos.ServerTask.State.valueOf(task.getState().name()))<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>      .setStartTime(task.getStartTime()).setCompletionTime(task.getCompletionTimestamp()).build()));<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span><a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    return serverLoad.build();<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  }<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span><a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    StringBuilder sb = new StringBuilder();<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>    for (Region r : this.onlineRegions.values()) {<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>      if (sb.length() &gt; 0) {<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>        sb.append(", ");<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      }<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>    return sb.toString();<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>  }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  /**<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>   * Wait on regions close.<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>   */<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>    // Wait till all regions are closed before going out.<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>    int lastCount = -1;<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>    long previousLogTime = 0;<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>    boolean interrupted = false;<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    try {<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>      while (!onlineRegions.isEmpty()) {<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>        int count = getNumberOfOnlineRegions();<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>        // Only print a message if the count of regions has changed.<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>        if (count != lastCount) {<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>          // Log every second at most<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>            lastCount = count;<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>            // Only print out regions still closing if a small number else will<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>            // swamp the log.<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>            }<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>          }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>        }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>        // protect against the case where an open comes in after we start the<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>        // iterator of onlineRegions to close all user regions.<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>          if (<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>            !this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes())<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>              &amp;&amp; !closedRegions.contains(hri.getEncodedName())<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>          ) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>            closedRegions.add(hri.getEncodedName());<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>            // Don't update zk with this close transition; pass false.<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>          if (!onlineRegions.isEmpty()) {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>            LOG.info("We were exiting though online regions are not empty,"<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>              + " because some regions failed closing");<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>          }<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>          break;<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>        } else {<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream()<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>            .map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>        }<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>        if (sleepInterrupted(200)) {<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>          interrupted = true;<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>    } finally {<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>      if (interrupted) {<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        Thread.currentThread().interrupt();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>      }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    }<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  }<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span><a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    boolean interrupted = false;<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    try {<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>      Thread.sleep(millis);<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    } catch (InterruptedException e) {<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>      LOG.warn("Interrupted while sleeping");<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      interrupted = true;<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    }<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    return interrupted;<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>  }<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span><a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>  private void shutdownWAL(final boolean close) {<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    if (this.walFactory != null) {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      try {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>        if (close) {<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>          walFactory.close();<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>        } else {<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>          walFactory.shutdown();<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>        }<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>      } catch (Throwable e) {<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>      }<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    }<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>  }<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span><a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>  /**<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>   * @param c Extra configuration.<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>   */<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    throws IOException {<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    try {<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      boolean updateRootDir = false;<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>        String key = e.getName();<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>        // The hostname the master sees us as.<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV,<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>            rpcServices.getSocketAddress().getPort(), this.startcode);<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>          String expectedHostName = rpcServices.getSocketAddress().getHostName();<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>          // if Master use-ip is enabled, RegionServer use-ip will be enabled by default even if it<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>          // is set to disable. so we will use the ip of the RegionServer to compare with the<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>          // hostname passed by the Master, see HBASE-27304 for details.<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>          if (<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>            StringUtils.isBlank(useThisHostnameInstead) &amp;&amp; getActiveMaster().isPresent()<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>              &amp;&amp; InetAddresses.isInetAddress(getActiveMaster().get().getHostname())<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>          ) {<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>            expectedHostName = rpcServices.getSocketAddress().getAddress().getHostAddress();<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>          }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>          boolean isHostnameConsist = StringUtils.isBlank(useThisHostnameInstead)<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>            ? hostnameFromMasterPOV.equals(expectedHostName)<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>            : hostnameFromMasterPOV.equals(useThisHostnameInstead);<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>          if (!isHostnameConsist) {<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>            String msg = "Master passed us a different hostname to use; was="<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>              + (StringUtils.isBlank(useThisHostnameInstead)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>                ? rpcServices.getSocketAddress().getHostName()<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>                : this.useThisHostnameInstead)<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>              + ", but now=" + hostnameFromMasterPOV;<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>            LOG.error(msg);<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            throw new IOException(msg);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>          }<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>          continue;<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        }<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>        String value = e.getValue();<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>            updateRootDir = true;<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>          }<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>        if (LOG.isDebugEnabled()) {<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        }<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>        this.conf.set(key, value);<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      createMyEphemeralNode();<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      if (updateRootDir) {<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>        initializeFileSystem();<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>      }<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>      // hack! Maps DFSClient =&gt; RegionServer for logs. HDFS made this<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<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>      // Save it in a file, this will allow to see if we crash<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span><a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      setupWALAndReplication();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      final MetricsTable metricsTable =<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      this.metricsRegionServer =<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        new MetricsRegionServer(metricsRegionServerImpl, conf, metricsTable);<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      pauseMonitor.start();<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span><a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>        startServices();<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>      // or make sense of it.<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>      startReplicationService();<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span><a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      // Set up ZK<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.getSocketAddress()<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>        + ", sessionid=0x"<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        + Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span><a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      // Wake up anyone waiting for this server to online<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>      synchronized (online) {<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        online.set(true);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        online.notifyAll();<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>      }<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    } catch (Throwable e) {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>      stop("Failed initialization");<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"), "Region server startup failed");<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>    } finally {<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>      sleeper.skipSleepCycle();<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><a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  private void startHeapMemoryManager() {<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>    if (this.blockCache != null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>      this.hMemManager =<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      this.hMemManager.start(getChoreService());<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    }<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 void createMyEphemeralNode() throws KeeperException {<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>  }<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span><a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>  }<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span><a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>  @Override<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>    return regionServerAccounting;<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span><a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>  // Round the size with KB or MB.<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>  // A trick here is that if the sizeInBytes is less than sizeUnit, we will round the size to 1<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>  // instead of 0 if it is not 0, to avoid some schedulers think the region has no data. See<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>  // HBASE-26340 for more details on why this is important.<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>  private static int roundSize(long sizeInByte, int sizeUnit) {<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>    if (sizeInByte == 0) {<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      return 0;<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>    } else if (sizeInByte &lt; sizeUnit) {<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      return 1;<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>    } else {<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      return (int) Math.min(sizeInByte / sizeUnit, Integer.MAX_VALUE);<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    }<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>   * @param r               Region to get RegionLoad for.<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>   * @param regionLoadBldr  the RegionLoad.Builder, can be null<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   * @return RegionLoad instance.<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>   */<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>    RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    int stores = 0;<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    int storefiles = 0;<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    int storeRefCount = 0;<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>    long storeUncompressedSize = 0L;<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    long storefileSize = 0L;<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>    long storefileIndexSize = 0L;<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    long rootLevelIndexSize = 0L;<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>    long totalStaticIndexSize = 0L;<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    long totalStaticBloomSize = 0L;<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    long totalCompactingKVs = 0L;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    long currentCompactedKVs = 0L;<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    stores += storeList.size();<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    for (HStore store : storeList) {<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      storefiles += store.getStorefilesCount();<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      storeRefCount += currentStoreRefCount;<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>      maxCompactedStoreFileRefCount =<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>        Math.max(maxCompactedStoreFileRefCount, currentMaxCompactedStoreFileRefCount);<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>      storeUncompressedSize += store.getStoreSizeUncompressed();<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      storefileSize += store.getStorefilesSize();<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      storefileIndexSize += store.getStorefilesRootLevelIndexSize();<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>      if (progress != null) {<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>      }<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>      rootLevelIndexSize += store.getStorefilesRootLevelIndexSize();<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>      totalStaticIndexSize += store.getTotalStaticIndexSize();<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      totalStaticBloomSize += store.getTotalStaticBloomSize();<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>    }<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span><a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    int unitMB = 1024 * 1024;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>    int unitKB = 1024;<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span><a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>    int memstoreSizeMB = roundSize(r.getMemStoreDataSize(), unitMB);<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>    int storeUncompressedSizeMB = roundSize(storeUncompressedSize, unitMB);<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>    int storefileSizeMB = roundSize(storefileSize, unitMB);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>    int storefileIndexSizeKB = roundSize(storefileIndexSize, unitKB);<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>    int rootLevelIndexSizeKB = roundSize(rootLevelIndexSize, unitKB);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    int totalStaticIndexSizeKB = roundSize(totalStaticIndexSize, unitKB);<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>    int totalStaticBloomSizeKB = roundSize(totalStaticBloomSize, unitKB);<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span><a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>    if (regionLoadBldr == null) {<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>    }<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    if (regionSpecifier == null) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>    }<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span><a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build()).setStores(stores)<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      .setStorefiles(storefiles).setStoreRefCount(storeRefCount)<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB).setStorefileSizeMB(storefileSizeMB)<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      .setMemStoreSizeMB(memstoreSizeMB).setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB).setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      .setReadRequestsCount(r.getReadRequestsCount()).setCpRequestsCount(r.getCpRequestsCount())<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      .setWriteRequestsCount(r.getWriteRequestsCount()).setTotalCompactingKVs(totalCompactingKVs)<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      .setCurrentCompactedKVs(currentCompactedKVs).setDataLocality(dataLocality)<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      .setDataLocalityForSsd(dataLocalityForSsd).setBlocksLocalWeight(blocksLocalWeight)<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight).setBlocksTotalWeight(blocksTotalWeight)<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      .setCompactionState(ProtobufUtil.createCompactionStateForRegionLoad(r.getCompactionState()))<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    return regionLoadBldr.build();<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>  }<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>    userLoadBldr.setUserName(user);<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    userSource.getClientMetrics().values().stream()<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>      .map(clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>        .setHostName(clientMetrics.getHostName())<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>        .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>        .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>      .forEach(userLoadBldr::addClientMetrics);<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>    return userLoadBldr.build();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>  }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span><a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>  }<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span><a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>  /**<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>   */<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    private final HRegionServer instance;<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private final int majorCompactPriority;<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>    // Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>    // immediately upon region server startup<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>    private long iteration = 1;<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span><a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>      this.instance = h;<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span><a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      /*<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>       * MajorCompactPriority is configurable. If not set, the compaction will use default priority.<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>       */<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      this.majorCompactPriority = this.instance.conf<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        .getInt("hbase.regionserver.compactionChecker.majorCompactPriority", DEFAULT_PRIORITY);<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    @Override<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>    protected void chore() {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        // Skip compaction if region is read only<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        if (r == null || r.isReadOnly()) {<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          continue;<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span><a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>        HRegion hr = (HRegion) r;<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>        for (HStore s : hr.stores.values()) {<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>          try {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>            assert multiplier &gt; 0;<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>            if (iteration % multiplier != 0) {<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>              continue;<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>            }<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>            if (s.needsCompaction()) {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>                getName() + " requests compaction");<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>              s.triggerMajorCompaction();<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>              if (<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>                majorCompactPriority == DEFAULT_PRIORITY<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>                  || majorCompactPriority &gt; hr.getCompactPriority()<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>              ) {<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>                  getName() + " requests major compaction; use default priority", Store.NO_PRIORITY,<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>                  CompactionLifeCycleTracker.DUMMY, null);<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>              } else {<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>                  getName() + " requests major compaction; use configured priority",<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>                  this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>              }<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>            }<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>          } catch (IOException e) {<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>          }<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        }<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>      }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<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>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    private final HRegionServer server;<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    private final long rangeOfDelayMs;<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      this.server = server;<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span><a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      final long configuredRangeOfDelay = server.getConfiguration()<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>        .getInt("hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>    }<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span><a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>    @Override<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>    protected void chore() {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>        if (r == null) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>          continue;<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        }<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          if (requester != null) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>            long delay = ThreadLocalRandom.current().nextLong(rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>            // Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>            // is a balanced write-load on the regions in a table, we might end up<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>            // overwhelming the filesystem with too many flushes at once.<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>            if (requester.requestDelayedFlush(r, delay)) {<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms", getName(),<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>                r.getRegionInfo().getRegionNameAsString(), whyFlush.toString(), delay);<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>            }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>          }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>        }<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>  }<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span><a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>  /**<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>   * Report the status of the server. A server is online once all the startup is completed (setting<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>   * up filesystem, starting executorService threads, etc.). This method is designed mostly to be<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>   * useful in tests.<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>   * @return true if online, false if not.<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>   */<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>  public boolean isOnline() {<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>    return online.get();<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>  }<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span><a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>  /**<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>   * be hooked up to WAL.<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>   */<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  private void setupWALAndReplication() throws IOException {<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>    WALFactory factory = new WALFactory(conf, serverName.toString(), this, true);<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>    Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>    String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span><a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>    Path logDir = new Path(walRootDir, logName);<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>    LOG.debug("logDir={}", logDir);<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>    if (this.walFs.exists(logDir)) {<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>      throw new RegionServerRunningException(<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        "Region server has already created directory at " + this.serverName.toString());<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>    }<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>    // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    // region servers.<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!this.walFs.mkdirs(logDir)) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      throw new IOException("Can not create wal directory " + logDir);<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>    createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir, factory);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span><a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    WALActionsListener walEventListener = getWALEventTrackerListener(conf);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    if (walEventListener != null &amp;&amp; factory.getWALProvider() != null) {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      factory.getWALProvider().addWALActionsListener(walEventListener);<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>    this.walFactory = factory;<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  }<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span><a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  private WALActionsListener getWALEventTrackerListener(Configuration conf) {<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    if (conf.getBoolean(WAL_EVENT_TRACKER_ENABLED_KEY, WAL_EVENT_TRACKER_ENABLED_DEFAULT)) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>      WALEventTrackerListener listener =<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>        new WALEventTrackerListener(conf, getNamedQueueRecorder(), getServerName());<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      return listener;<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    }<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    return null;<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>  /**<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>   * Start up replication source and sink handlers.<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>   */<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  private void startReplicationService() throws IOException {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    } else {<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>      if (this.replicationSourceHandler != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>      }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      if (this.replicationSinkHandler != null) {<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>      }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>    }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>  }<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>  /** Returns Master address tracker instance. */<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>    return this.masterAddressTracker;<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>  }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span><a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>  /**<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>   * Start maintenance Threads, Server, Worker and lease checker threads. Start all threads we need<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   * to run. This is called after we've successfully registered with the Master. Install an<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   * UncaughtExceptionHandler that calls abort of RegionServer if we get an unhandled exception. We<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>   * cannot set the handler on all threads. Server's internal Listener thread is off limits. For<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>   * Server, if an OOME, it waits a while then retries. Meantime, a flush or a compaction that tries<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>   * to run should trigger same critical condition and the shutdown will run. On its way out, this<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>   * server will shut down Server. Leases are sort of inbetween. It has an internal thread that<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>   * while it inherits from Chore, it keeps its own internal stop mechanism so needs to be stopped<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>   * by this hosting server. Worker logs the exception and exits.<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>   */<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>  private void startServices() throws IOException {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>      initializeThreads();<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>    this.secureBulkLoadManager.start();<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span><a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    // Health checker thread.<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>    if (isHealthCheckerConfigured()) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>        HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>    }<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>    // Executor status collect thread.<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>    if (<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>      this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>    ) {<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>      int sleepTime =<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>        this.conf.getInt(ExecutorStatusChore.WAKE_FREQ, ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>        this.metricsRegionServer.getMetricsSource());<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>    }<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span><a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>    this.walRoller = new LogRoller(this);<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span><a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    int cleanerInterval = conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>    this.compactedFileDischarger = new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.1838"></a>
-<span class="sourceLineNo">1839</span><a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    // Start executor services<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    final int openRegionThreads = conf.getInt("hbase.regionserver.executor.openregion.threads", 3);<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>      .setExecutorType(ExecutorType.RS_OPEN_REGION).setCorePoolSize(openRegionThreads));<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>    final int openMetaThreads = conf.getInt("hbase.regionserver.executor.openmeta.threads", 1);<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      .setExecutorType(ExecutorType.RS_OPEN_META).setCorePoolSize(openMetaThreads));<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>    final int openPriorityRegionThreads =<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3);<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>    executorService.startExecutorService(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_OPEN_PRIORITY_REGION)<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>        .setCorePoolSize(openPriorityRegionThreads));<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    final int closeRegionThreads =<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3);<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>      .setExecutorType(ExecutorType.RS_CLOSE_REGION).setCorePoolSize(closeRegionThreads));<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>    final int closeMetaThreads = conf.getInt("hbase.regionserver.executor.closemeta.threads", 1);<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>      .setExecutorType(ExecutorType.RS_CLOSE_META).setCorePoolSize(closeMetaThreads));<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>      final int storeScannerParallelSeekThreads =<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10);<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>      executorService.startExecutorService(<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>        executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_PARALLEL_SEEK)<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>          .setCorePoolSize(storeScannerParallelSeekThreads).setAllowCoreThreadTimeout(true));<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>    }<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>    final int logReplayOpsThreads =<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>      conf.getInt(HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER);<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>    executorService.startExecutorService(<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_LOG_REPLAY_OPS)<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>        .setCorePoolSize(logReplayOpsThreads).setAllowCoreThreadTimeout(true));<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>    // Start the threads for compacted files discharger<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    final int compactionDischargerThreads =<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10);<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>      .setExecutorType(ExecutorType.RS_COMPACTED_FILES_DISCHARGER)<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      .setCorePoolSize(compactionDischargerThreads));<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>      final int regionReplicaFlushThreads =<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>      executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>        .setExecutorType(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS)<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>        .setCorePoolSize(regionReplicaFlushThreads));<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>    }<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    final int refreshPeerThreads =<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2);<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>      .setExecutorType(ExecutorType.RS_REFRESH_PEER).setCorePoolSize(refreshPeerThreads));<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>    final int replaySyncReplicationWALThreads =<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1);<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>      .setExecutorType(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL)<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>      .setCorePoolSize(replaySyncReplicationWALThreads));<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>    final int switchRpcThrottleThreads =<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1);<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>    executorService.startExecutorService(<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_SWITCH_RPC_THROTTLE)<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>        .setCorePoolSize(switchRpcThrottleThreads));<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    final int claimReplicationQueueThreads =<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      conf.getInt("hbase.regionserver.executor.claim.replication.queue.threads", 1);<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>    executorService.startExecutorService(<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_CLAIM_REPLICATION_QUEUE)<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>        .setCorePoolSize(claimReplicationQueueThreads));<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>    final int rsSnapshotOperationThreads =<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>      conf.getInt("hbase.regionserver.executor.snapshot.operations.threads", 3);<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>    executorService.startExecutorService(<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_SNAPSHOT_OPERATIONS)<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>        .setCorePoolSize(rsSnapshotOperationThreads));<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>      uncaughtExceptionHandler);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>    if (this.cacheFlusher != null) {<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>    }<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span><a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>    if (this.compactionChecker != null) {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>      choreService.scheduleChore(compactionChecker);<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    }<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>    if (this.periodicFlusher != null) {<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>      choreService.scheduleChore(periodicFlusher);<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>    }<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    if (this.healthCheckChore != null) {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>      choreService.scheduleChore(healthCheckChore);<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    }<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    if (this.executorStatusChore != null) {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      choreService.scheduleChore(executorStatusChore);<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>    }<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>    if (this.nonceManagerChore != null) {<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>    if (this.storefileRefresher != null) {<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>      choreService.scheduleChore(storefileRefresher);<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>    }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>    if (this.fsUtilizationChore != null) {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    }<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    if (this.namedQueueServiceChore != null) {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      choreService.scheduleChore(namedQueueServiceChore);<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    }<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>    if (this.brokenStoreFileCleaner != null) {<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      choreService.scheduleChore(brokenStoreFileCleaner);<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>    }<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>    if (this.rsMobFileCleanerChore != null) {<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>      choreService.scheduleChore(rsMobFileCleanerChore);<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>    }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>    if (replicationMarkerChore != null) {<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>      LOG.info("Starting replication marker chore");<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>      choreService.scheduleChore(replicationMarkerChore);<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>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>    // an unhandled exception, it will just exit.<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>      uncaughtExceptionHandler);<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span><a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    // Create the log splitting worker and start it<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>    if (<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      this.csm != null<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>        &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK, DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    ) {<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      splitLogWorker.start();<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>      LOG.debug("SplitLogWorker started");<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>    }<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span><a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    // Memstore services.<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    startHeapMemoryManager();<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    // Call it after starting HeapMemoryManager.<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>    initializeMemStoreChunkCreator(hMemManager);<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  }<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span><a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>  private void initializeThreads() {<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    // Cache flushing thread.<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span><a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    // Compaction thread<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span><a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span><a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    final boolean walEventTrackerEnabled =<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>      conf.getBoolean(WAL_EVENT_TRACKER_ENABLED_KEY, WAL_EVENT_TRACKER_ENABLED_DEFAULT);<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span><a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>    if (isSlowLogTableEnabled || walEventTrackerEnabled) {<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>      // default chore duration: 10 min<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>      // After &lt;version number&gt;, we will remove hbase.slowlog.systable.chore.duration conf property<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>      final int slowLogChoreDuration = conf.getInt(HConstants.SLOW_LOG_SYS_TABLE_CHORE_DURATION_KEY,<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>        DEFAULT_SLOW_LOG_SYS_TABLE_CHORE_DURATION);<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span><a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>      final int namedQueueChoreDuration =<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>        conf.getInt(NAMED_QUEUE_CHORE_DURATION_KEY, NAMED_QUEUE_CHORE_DURATION_DEFAULT);<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      // Considering min of slowLogChoreDuration and namedQueueChoreDuration<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      int choreDuration = Math.min(slowLogChoreDuration, namedQueueChoreDuration);<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span><a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>      namedQueueServiceChore = new NamedQueueServiceChore(this, choreDuration,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>        this.namedQueueRecorder, this.getConnection());<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    }<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span><a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>    if (this.nonceManager != null) {<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span><a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>    // Setup the Quota Manager<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span><a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>    boolean onlyMetaRefresh = false;<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    int storefileRefreshPeriod =<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      conf.getInt(StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    if (storefileRefreshPeriod == 0) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      storefileRefreshPeriod =<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>        conf.getInt(StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      onlyMetaRefresh = true;<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      this.storefileRefresher =<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>        new StorefileRefresherChore(storefileRefreshPeriod, onlyMetaRefresh, this, this);<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    }<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span><a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    int brokenStoreFileCleanerPeriod =<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>      conf.getInt(BrokenStoreFileCleaner.BROKEN_STOREFILE_CLEANER_PERIOD,<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>        BrokenStoreFileCleaner.DEFAULT_BROKEN_STOREFILE_CLEANER_PERIOD);<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    int brokenStoreFileCleanerDelay =<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      conf.getInt(BrokenStoreFileCleaner.BROKEN_STOREFILE_CLEANER_DELAY,<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>        BrokenStoreFileCleaner.DEFAULT_BROKEN_STOREFILE_CLEANER_DELAY);<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    double brokenStoreFileCleanerDelayJitter =<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>      conf.getDouble(BrokenStoreFileCleaner.BROKEN_STOREFILE_CLEANER_DELAY_JITTER,<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>        BrokenStoreFileCleaner.DEFAULT_BROKEN_STOREFILE_CLEANER_DELAY_JITTER);<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    double jitterRate =<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      (ThreadLocalRandom.current().nextDouble() - 0.5D) * brokenStoreFileCleanerDelayJitter;<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    long jitterValue = Math.round(brokenStoreFileCleanerDelay * jitterRate);<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    this.brokenStoreFileCleaner =<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      new BrokenStoreFileCleaner((int) (brokenStoreFileCleanerDelay + jitterValue),<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>        brokenStoreFileCleanerPeriod, this, conf, this);<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span><a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    this.rsMobFileCleanerChore = new RSMobFileCleanerChore(this);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span><a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>    registerConfigurationObservers();<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    initializeReplicationMarkerChore();<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>  }<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span><a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>  private void registerConfigurationObservers() {<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    // Register Replication if possible, as now we support recreating replication peer storage, for<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    // migrating across different replication peer storages online<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    if (replicationSourceHandler instanceof ConfigurationObserver) {<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>      configurationManager.registerObserver((ConfigurationObserver) replicationSourceHandler);<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    }<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    if (!sameReplicationSourceAndSink &amp;&amp; replicationSinkHandler instanceof ConfigurationObserver) {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      configurationManager.registerObserver((ConfigurationObserver) replicationSinkHandler);<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>    }<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>    configurationManager.registerObserver(this);<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>  }<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span><a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>  /*<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>   * Verify that server is healthy<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>   */<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  private boolean isHealthy() {<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>    if (!dataFsOk) {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>      // File system problem<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>      return false;<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    }<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    // Verify that all threads are alive<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>      &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>      &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>      &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    if (!healthy) {<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    return healthy;<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>  }<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span><a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>  @Override<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>    return walFactory.getWALs();<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>  }<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>  @Override<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>    if (this.walRoller != null) {<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      this.walRoller.addWAL(wal);<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>    return wal;<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>  }<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span><a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public LogRoller getWalRoller() {<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>    return walRoller;<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>  }<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span><a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>  WALFactory getWalFactory() {<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>    return walFactory;<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>  }<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span><a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>  @Override<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>  public void stop(final String msg) {<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>  }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span><a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>  /**<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>   * Stops the regionserver.<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>   * @param msg   Status message<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>   * @param force True if this is a regionserver abort<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>   * @param user  The user executing the stop request, or null if no user is associated<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>   */<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    if (!this.stopped) {<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>      if (this.rsHost != null) {<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>        // when forced via abort don't allow CPs to override<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        try {<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>          this.rsHost.preStop(msg, user);<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>        } catch (IOException ioe) {<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>          if (!force) {<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>            return;<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>          }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>        }<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>      }<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>      this.stopped = true;<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>      LOG.info("STOPPED: " + msg);<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>      // Wakes run() if it is sleeping<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>      sleeper.skipSleepCycle();<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><a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>  public void waitForServerOnline() {<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>      synchronized (online) {<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>        try {<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>          online.wait(msgInterval);<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>        } catch (InterruptedException ie) {<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>          Thread.currentThread().interrupt();<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>          break;<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>        }<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      }<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>    }<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  }<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span><a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>  @Override<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    HRegion r = context.getRegion();<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    long openProcId = context.getOpenProcId();<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    rpcServices.checkOpen();<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>    // Skip compaction check if region is read only<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>    if (!r.isReadOnly()) {<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      for (HStore s : r.stores.values()) {<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>        }<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>      }<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>    }<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>      LOG.error(<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      openSeqNum = 0;<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    }<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span><a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    // Notify master<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    if (<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>      !reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>        openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>    ) {<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>      throw new IOException(<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>    }<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span><a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>    triggerFlushInPrimaryRegion(r);<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span><a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>  }<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span><a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  /**<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>   * Helper method for use in tests. Skip the region transition report when there's no master around<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>   * to receive it.<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>   */<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>    final TransitionCode code = context.getCode();<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    final RegionInfo[] hris = context.getHris();<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span><a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>    if (code == TransitionCode.OPENED) {<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>      if (hris[0].isMetaRegion()) {<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>        LOG.warn(<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>          "meta table location is stored in master local store, so we can not skip reporting");<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        return false;<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      } else {<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        try {<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>            serverName, openSeqNum, masterSystemTime);<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>        } catch (IOException e) {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>          LOG.info("Failed to update meta", e);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>          return false;<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>        }<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>    }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>    return true;<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  private ReportRegionStateTransitionRequest<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>    createReportRegionStateTransitionRequest(final RegionStateTransitionContext context) {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    final TransitionCode code = context.getCode();<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>    final RegionInfo[] hris = context.getHris();<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>    final long[] procIds = context.getProcIds();<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span><a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>    transition.setTransitionCode(code);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>    }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>    for (RegionInfo hri : hris) {<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>    }<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>    for (long procId : procIds) {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>      transition.addProcId(procId);<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>    }<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span><a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    return builder.build();<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>  @Override<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>      return skipReportingTransition(context);<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    }<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>    final ReportRegionStateTransitionRequest request =<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>      createReportRegionStateTransitionRequest(context);<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span><a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>    int tries = 0;<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>    long pauseTime = this.retryPauseTime;<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>    // HRegionServer does down.<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      try {<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>        if (rss == null) {<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>          createRegionServerStatusStub();<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>          continue;<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>        }<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>        ReportRegionStateTransitionResponse response =<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>          rss.reportRegionStateTransition(null, request);<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>        if (response.hasErrorMessage()) {<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>          break;<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>        }<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>        }<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>        // NOTE: Return mid-method!!!<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>        return true;<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>      } catch (ServiceException se) {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>        boolean pause = ioe instanceof ServerNotRunningYetException<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>          || ioe instanceof PleaseHoldException || ioe instanceof CallQueueTooBigException;<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>        if (pause) {<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>          // Do backoff else we flood the Master with requests.<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>          pauseTime = ConnectionUtils.getPauseTime(this.retryPauseTime, tries);<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>        } else {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>          pauseTime = this.retryPauseTime; // Reset.<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>        }<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        LOG.info("Failed report transition " + TextFormat.shortDebugString(request) + "; retry (#"<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>          + tries + ")"<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>          + (pause<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>            ? " after " + pauseTime + "ms delay (Master is coming online...)."<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>            : " immediately."),<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>          ioe);<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>        if (pause) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>          Threads.sleep(pauseTime);<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>        }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>        tries++;<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>        if (rssStub == rss) {<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>          rssStub = null;<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>        }<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      }<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    }<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>    return false;<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>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>   */<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>      return;<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>    }<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>    TableName tn = region.getTableDescriptor().getTableName();<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>    if (<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>      !ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf, tn)<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>        || !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(region.conf) ||<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>        // If the memstore replication not setup, we do not have to wait for observing a flush event<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>        // from primary before starting to serve reads, because gaps from replication is not<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>        // applicable,this logic is from<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>        // TableDescriptorBuilder.ModifyableTableDescriptor.setRegionMemStoreReplication by<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>        // HBASE-13063<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>        !region.getTableDescriptor().hasRegionMemStoreReplication()<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>    ) {<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      region.setReadsEnabled(true);<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>      return;<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>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span><a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>    if (this.executorService != null) {<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>    } else {<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        region.getRegionInfo());<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>    }<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>  }<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span><a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>  @InterfaceAudience.Private<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>  public RSRpcServices getRSRpcServices() {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    return rpcServices;<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  /**<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>   * Cause the server to exit without closing the regions it is serving, the log it is using and<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>   * without notifying the master. Used unit testing and on catastrophic events such as HDFS is<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>   * yanked out from under hbase or we OOME. the reason we are aborting the exception that caused<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>   * the abort, or null<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>   */<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>  @Override<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>  public void abort(String reason, Throwable cause) {<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    if (!setAbortRequested()) {<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>      // Abort already in progress, ignore the new request.<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>      LOG.debug("Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>      return;<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    }<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>    if (cause != null) {<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>    } else {<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    }<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    LOG.error(HBaseMarkers.FATAL,<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      "RegionServer abort: loaded coprocessors are: " + CoprocessorHost.getLoadedCoprocessors());<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>    try {<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>    }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span><a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>    try {<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>      if (cause != null) {<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>      }<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>      // Report to the master but only if we have already registered with the master.<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>        ReportRSFatalErrorRequest.Builder builder = ReportRSFatalErrorRequest.newBuilder();<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>        builder.setErrorMessage(msg);<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>      }<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>    } catch (Throwable t) {<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>    }<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span><a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>    scheduleAbortTimer();<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>    // shutdown should be run as the internal user<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>    stop(reason, true, null);<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>  }<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span><a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>  /*<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup logs but it does<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>   * close socket in case want to bring up server on old hostname+port immediately.<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>   */<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>  @InterfaceAudience.Private<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>  protected void kill() {<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>    this.killed = true;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>    abort("Simulated kill");<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>  }<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span><a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>  // Limits the time spent in the shutdown process.<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>  private void scheduleAbortTimer() {<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>    if (this.abortMonitor == null) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>      TimerTask abortTimeoutTask = null;<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>      try {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>        timerTaskCtor.setAccessible(true);<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>      } catch (Exception e) {<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>      }<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>      if (abortTimeoutTask != null) {<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>      }<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>    }<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>  }<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span><a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>  /**<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>   * Wait on all threads to finish. Presumption is that all closes and stops have already been<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>   * called.<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>   */<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>  protected void stopServiceThreads() {<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    // clean up the scheduled chores<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>    stopChoreService();<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>    if (bootstrapNodeManager != null) {<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>      bootstrapNodeManager.stop();<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    }<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>    if (this.cacheFlusher != null) {<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>      this.cacheFlusher.join();<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>    }<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>    if (this.walRoller != null) {<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>      this.walRoller.close();<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>    }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>    if (this.compactSplitThread != null) {<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>      this.compactSplitThread.join();<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    }<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    stopExecutorService();<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    } else {<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>      if (this.replicationSourceHandler != null) {<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>      }<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>      if (this.replicationSinkHandler != null) {<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>      }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>    }<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>  }<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span><a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>  /** Returns Return the object that implements the replication source executorService. */<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>  @Override<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>    return replicationSourceHandler;<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>  }<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span><a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>  /** Returns Return the object that implements the replication sink executorService. */<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    return replicationSinkHandler;<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span><a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>  /**<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>   * You can break from this block by requesting the server stop.<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>   * @return master + port, or null if server has been stopped<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>   */<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>    return createRegionServerStatusStub(false);<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>  }<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span><a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>  /**<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>   * You can break from this block by requesting the server stop.<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>   * @return master + port, or null if server has been stopped<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>   */<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>  @InterfaceAudience.Private<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>    if (rssStub != null) {<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>      return masterAddressTracker.getMasterAddress();<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>    }<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>    ServerName sn = null;<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    long previousLogTime = 0;<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>    boolean interrupted = false;<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    try {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      while (keepLooping()) {<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>        if (sn == null) {<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>          if (!keepLooping()) {<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>            // give up with no connection.<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>            return null;<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>          }<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>            LOG.debug("No master found; retry");<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>          }<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>          if (sleepInterrupted(200)) {<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>            interrupted = true;<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>          }<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>          continue;<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>        }<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>        try {<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>          BlockingRpcChannel channel = this.rpcClient.createBlockingRpcChannel(sn,<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>            userProvider.getCurrent(), shortOperationTimeout);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>          break;<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>        } catch (IOException e) {<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>            e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>            } else {<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>            }<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>          }<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>          if (sleepInterrupted(200)) {<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>            interrupted = true;<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>          }<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>        }<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>      }<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>    } finally {<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      if (interrupted) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>        Thread.currentThread().interrupt();<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>      }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>    }<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>    this.rssStub = intRssStub;<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>    this.lockStub = intLockStub;<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    return sn;<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>  }<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span><a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  /**<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>   * @return True if we should break loop because cluster is going down or this server has been<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>   *         stopped or hdfs has gone bad.<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>   */<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>  private boolean keepLooping() {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>  }<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span><a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>  /*<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>   * Let the master know we're here Run initialization using parameters passed us by the master.<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>   * @return A Map of key/value configurations we got from the Master else null if we failed to<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>   * register.<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>   */<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>    if (this.masterless) {<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      return RegionServerStartupResponse.getDefaultInstance();<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>    }<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>    if (masterServerName == null || rss == null) {<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>      return null;<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>    }<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>    RegionServerStartupResponse result = null;<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>    try {<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>      rpcServices.requestCount.reset();<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>        + rpcServices.getSocketAddress().getPort() + ", startcode=" + this.startcode);<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>      int port = rpcServices.getSocketAddress().getPort();<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>      }<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      request.setPort(port);<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      request.setServerStartCode(this.startcode);<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      request.setServerCurrentTime(now);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>    } catch (ServiceException se) {<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync", ioe);<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>        // Re-throw IOE will cause RS to abort<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>        throw ioe;<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>        LOG.debug("Master is not running yet");<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      } else {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        LOG.warn("error telling master we are up", se);<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>      }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span>      rssStub = null;<a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    }<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>    return result;<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>  }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span><a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>  @Override<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    try {<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>        RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>      if (rss == null) { // Try to connect one more time<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        createRegionServerStatusStub();<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>        rss = rssStub;<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>        if (rss == null) {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>          // Still no luck, we tried<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>            .build();<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>        }<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>      }<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>    } catch (ServiceException e) {<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>        .build();<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>    }<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>  }<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span><a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>  /**<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>   * Close meta region if we carry it<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   * @param abort Whether we're running an abort.<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>   */<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    HRegion meta = null;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>    try {<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>      for (Map.Entry&lt;String, HRegion&gt; e : onlineRegions.entrySet()) {<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>        if (hri.isMetaRegion()) {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>          meta = e.getValue();<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>        }<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        if (meta != null) {<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>          break;<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>    } finally {<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>    }<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>    if (meta != null) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>      closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>    }<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>  }<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span><a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>  /**<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   * Schedule closes on all user regions. Should be safe calling multiple times because it wont'<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>   * close regions that are already closed or that are closing.<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>   * @param abort Whether we're running an abort.<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>   */<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>  private void closeUserRegions(final boolean abort) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    try {<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>      for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>        HRegion r = e.getValue();<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>          // Don't update zk with this close transition; pass false.<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>        }<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      }<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>    } finally {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      this.onlineRegionsLock.writeLock().unlock();<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>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>    return this.onlineRegions;<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>  }<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span><a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>  public int getNumberOfOnlineRegions() {<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>    return this.onlineRegions.size();<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>  }<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span><a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>  /**<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>   * For tests, web ui and metrics. This method will only work if HRegionServer is in the same JVM<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>   * as client; HRegion cannot be serialized to cross an rpc.<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>   */<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>    return Collections.unmodifiableCollection(regions);<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>  @Override<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>  public void addRegion(HRegion region) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>    configurationManager.registerObserver(region);<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>  }<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span><a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>    long size) {<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>    }<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>    sortedRegions.get(size).add(region);<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>  }<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span><a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>  /**<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>   *         the biggest.<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>   */<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    // we'll sort the regions in reverse<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>    }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>    return sortedRegions;<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>  }<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span><a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>  /**<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>   *         biggest.<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>   */<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>    // we'll sort the regions in reverse<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>    }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>    return sortedRegions;<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>  }<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span><a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>  /** Returns reference to FlushRequester */<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  @Override<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>  public FlushRequester getFlushRequester() {<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>    return this.cacheFlusher;<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>  }<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span><a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>  @Override<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>    return this.compactSplitThread;<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>  }<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span><a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>  @Override<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>  public LeaseManager getLeaseManager() {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    return leaseManager;<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>  }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span><a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>  /** Returns {@code true} when the data file system is available, {@code false} otherwise. */<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>  boolean isDataFileSystemOk() {<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    return this.dataFsOk;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>  }<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span><a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost() {<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>    return this.rsHost;<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>  }<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span><a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>  @Override<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>    return this.regionsInTransitionInRS;<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>  }<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span><a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>  @Override<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>    return rsQuotaManager;<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>  }<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span><a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>  //<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>  // Main program and support routines<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>  //<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>  /**<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>   * Load the replication executorService objects, if any<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>   */<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>    FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>    // read in the name of the source replication class from the config file.<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span><a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    // read in the name of the sink replication class from the config file.<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>    // only one object.<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      server.sameReplicationSourceAndSink = true;<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>    } else {<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>      server.sameReplicationSourceAndSink = false;<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><a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>    Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>    Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>    final Class&lt;? extends T&gt; clazz;<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    try {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>      throw new IOException("Could not find class for " + classname);<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>    }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>    return service;<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>  }<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span><a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus() {<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>    if (!this.isOnline()) {<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>      return walGroupsReplicationStatus;<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    }<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>    for (ReplicationSourceInterface source : allSources) {<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>    }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    return walGroupsReplicationStatus;<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>  }<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span><a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  /**<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>   */<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>  static HRegionServer constructRegionServer(final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    final Configuration conf) {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>    try {<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>        regionServerClass.getConstructor(Configuration.class);<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>      return c.newInstance(conf);<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>    } catch (Exception e) {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      throw new RuntimeException(<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>        "Failed construction of " + "Regionserver: " + regionServerClass.toString(), e);<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>    }<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>  }<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span><a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>  /**<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>   */<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>  public static void main(String[] args) {<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>    VersionInfo.logVersion();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    Configuration conf = HBaseConfiguration.create();<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>    @SuppressWarnings("unchecked")<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>      .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span><a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<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>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * Gets the online regions of the specified table. This method looks at the in-memory<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   * onlineRegions. It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;. Only returns &lt;em&gt;online&lt;/em&gt; regions.<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>   * If a region on this table has been closed during a disable, etc., it will not be included in<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>   * the returned list. So, the returned list may not necessarily be ALL regions in this table, its<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>   * all the ONLINE regions in the table.<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>   * @param tableName table to limit the scope of the query<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>   */<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  @Override<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span>    synchronized (this.onlineRegions) {<a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>      for (HRegion region : this.onlineRegions.values()) {<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>        RegionInfo regionInfo = region.getRegionInfo();<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>        if (regionInfo.getTable().equals(tableName)) {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>          tableRegions.add(region);<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>        }<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>      }<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    }<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>    return tableRegions;<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>  }<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span><a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>  @Override<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>    List&lt;HRegion&gt; allRegions;<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>    synchronized (this.onlineRegions) {<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>      // Return a clone copy of the onlineRegions<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>    }<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>    return allRegions;<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>  }<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span><a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>  /**<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>   * Gets the online tables in this RS. This method looks at the in-memory onlineRegions.<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>   * @return all the online tables in this RS<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>   */<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>    synchronized (this.onlineRegions) {<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>      for (Region region : this.onlineRegions.values()) {<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>      }<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>    }<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    return tables;<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>  }<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span><a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>  public String[] getRegionServerCoprocessors() {<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>    try {<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>    } catch (IOException exception) {<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; "<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>        + "skipping.");<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    }<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    for (HRegion region : regions) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>      try {<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>      } catch (IOException exception) {<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>          + "; skipping.");<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>      }<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>    }<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    return coprocessors.toArray(new String[0]);<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>  }<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span><a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>  /**<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>   * @param region Region to close<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>   */<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>    try {<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>        LOG<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>          .warn("Failed to close " + region.getRegionNameAsString() + " - ignoring and continuing");<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>      }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>    } catch (IOException e) {<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() + " - ignoring and continuing",<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>        e);<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>    }<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>  }<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span><a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>  /**<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>   * when stopping. If called from the master, the region will update the status.<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>   * &lt;p&gt;<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>   * &lt;/p&gt;<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>   * &lt;p&gt;<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>   * If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>   * &lt;/p&gt;<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>   * &lt;p&gt;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>   * Provides additional flag to indicate if this region blocks should be evicted from the cache.<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>   * &lt;/p&gt;<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>   * @param encodedName Region to close<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @param abort       True if we are aborting<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>   * @return True if closed a region.<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>   * @throws NotServingRegionException if the region is not online<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>   */<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>    final ServerName destination) throws NotServingRegionException {<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>    // Check for permissions to close.<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>    // Can be null if we're calling close on a region that's not online<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>      try {<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>      } catch (IOException exp) {<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>        return false;<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>      }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>    }<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span><a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>    // previous can come back 'null' if not in map.<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>    final Boolean previous =<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>      this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName), Boolean.FALSE);<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span><a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already "<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>        + "trying to OPEN. Cancelling OPENING.");<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>        // We're going to try to do a standard close then.<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it."<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>          + " Doing a standard close now");<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>        return closeRegion(encodedName, abort, destination);<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>      }<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>      // Let's get the region from the online region list again<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>      actualRegion = this.getRegion(encodedName);<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>        // The master deletes the znode when it receives this exception.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>        throw new NotServingRegionException(<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>          "The region " + encodedName + " was opening but not yet served. Opening is cancelled.");<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>      }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>    } else if (previous == null) {<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>      LOG.info("Received CLOSE for the region: " + encodedName<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>        + ", which we are already trying to CLOSE, but not completed yet");<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>      return true;<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>    }<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span><a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>    if (actualRegion == null) {<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>      // The master deletes the znode when it receives this exception.<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>      throw new NotServingRegionException(<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>        "The region " + encodedName + " is not online, and is not opening.");<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>    }<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span><a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    CloseRegionHandler crh;<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>    if (hri.isMetaRegion()) {<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>    } else {<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>    }<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>    this.executorService.submit(crh);<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>    return true;<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>  /**<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if named region is not<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>   *         member of the online regions.<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>   */<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>    return this.onlineRegions.get(encodedRegionName);<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>  @Override<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>  }<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span><a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>  @Override<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>    if (destination != null) {<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>        if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>          closeSeqNum = 0;<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>        }<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>      }<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>      if (selfMove) {<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>          r.getRegionInfo().getEncodedName(),<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>          new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>      }<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    }<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>    configurationManager.deregisterObserver(r);<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span>    return toReturn != null;<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>  }<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span><a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>  /**<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>   */<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>  protected HRegion getRegion(final byte[] regionName) throws NotServingRegionException {<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>  }<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span><a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>  public HRegion getRegionByEncodedName(String encodedRegionName) throws NotServingRegionException {<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>    return getRegionByEncodedName(null, encodedRegionName);<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>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>    throws NotServingRegionException {<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>    if (region == null) {<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>      if (moveInfo != null) {<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>      }<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>      String regionNameStr =<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>        regionName == null ? encodedRegionName : Bytes.toStringBinary(regionName);<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>        throw new RegionOpeningException(<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>          "Region " + regionNameStr + " is opening on " + this.serverName);<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>      }<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>      throw new NotServingRegionException(<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>        "" + regionNameStr + " is not online on " + this.serverName);<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>    }<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>    return region;<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>  }<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span><a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>  /**<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to IOE if it isn't<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>   * already.<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>   * @param t   Throwable<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>   * @param msg Message to log in error. Can be null.<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>   */<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>    if (t instanceof NotServingRegionException) {<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>      return t;<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>    }<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>    if (msg == null) {<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>      LOG.error("", e);<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    } else {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>      LOG.error(msg, e);<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>    }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>      checkFileSystem();<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>    }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>    return t;<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>  }<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span><a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>  /**<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>   */<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>    return (t instanceof IOException ? (IOException) t<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>      : msg == null || msg.length() == 0 ? new IOException(t)<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>      : new IOException(msg, t));<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>  }<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span><a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>  /**<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>   * Checks to see if the file system is still accessible. If not, sets abortRequested and<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>   * stopRequested<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>   * @return false if file system is not available<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>   */<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>  boolean checkFileSystem() {<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>      try {<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>      } catch (IOException e) {<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>        abort("File System not available", e);<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>        this.dataFsOk = false;<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>      }<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>    }<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    return this.dataFsOk;<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>  }<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span><a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>  @Override<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>    List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>    Address[] addr = new Address[favoredNodes.size()];<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>    // it is a map of region name to Address[]<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>      addr[i] = Address.fromParts(favoredNodes.get(i).getHostName(), favoredNodes.get(i).getPort());<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>    }<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  }<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>   * Return the favored nodes for a region given its encoded name. Look at the comment around<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>   * {@link #regionFavoredNodesMap} on why we convert to InetSocketAddress[] here.<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>   * @param encodedRegionName the encoded region name.<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>   * @return array of favored locations<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>   */<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>  @Override<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>    return Address.toSocketAddress(regionFavoredNodesMap.get(encodedRegionName));<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>  }<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span><a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>  @Override<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>  public ServerNonceManager getNonceManager() {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    return this.nonceManager;<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>  }<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span><a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>  private static class MovedRegionInfo {<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    private final ServerName serverName;<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    private final long seqNum;<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span><a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>      this.serverName = serverName;<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      this.seqNum = closeSeqNum;<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>    }<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span><a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>    public ServerName getServerName() {<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>      return serverName;<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span><a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>    public long getSeqNum() {<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>      return seqNum;<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>    }<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>  }<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span><a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>  /**<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double the<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>   * number of network calls instead of reducing them.<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>   */<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span><a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum,<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>    boolean selfMove) {<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    if (selfMove) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>      return;<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    }<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid="<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span>      + closeSeqNum);<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>  }<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span><a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>  }<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span><a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>  @InterfaceAudience.Private<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>  }<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span><a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>  @InterfaceAudience.Private<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>  public int movedRegionCacheExpiredTime() {<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>    return TIMEOUT_REGION_MOVED;<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>  }<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span><a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>  private String getMyEphemeralNodePath() {<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>    return zooKeeper.getZNodePaths().getRsPath(serverName);<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>  }<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span><a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>  private boolean isHealthCheckerConfigured() {<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>  }<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span><a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>  /** Returns the underlying {@link CompactSplit} for the servers */<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>  public CompactSplit getCompactSplitThread() {<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>    return this.compactSplitThread;<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>  }<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span><a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>    final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>    try {<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>      String serviceName = call.getServiceName();<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>      if (service == null) {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>        throw new UnknownProtocolException(null,<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>          "No registered coprocessor executorService found for " + serviceName);<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>      }<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>      ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span><a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>      String methodName = call.getMethodName();<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>      MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>      if (methodDesc == null) {<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>        throw new UnknownProtocolException(service.getClass(),<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>          "Unknown method " + methodName + " called on executorService " + serviceName);<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>      Message request = CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>      final Message.Builder responseBuilder =<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>        if (message != null) {<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>          responseBuilder.mergeFrom(message);<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>        }<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>      });<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      if (exception != null) {<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>        throw exception;<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>      }<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>    } catch (IOException ie) {<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>      throw new ServiceException(ie);<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>    }<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>  }<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span><a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>  /**<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>   * May be null if this is a master which not carry table.<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>   * @return The block cache instance used by the regionserver.<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>   */<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>  @Override<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>    return Optional.ofNullable(this.blockCache);<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>  }<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span><a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>  /**<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>   * May be null if this is a master which not carry table.<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>   * @return The cache for mob files used by the regionserver.<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>   */<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>  @Override<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>  }<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span><a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>    long evictedBlocks = 0;<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span><a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>    for (Store store : region.getStores()) {<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>      for (StoreFile hFile : store.getStorefiles()) {<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>      }<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>    }<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span><a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>    return CacheEvictionStats.builder().withEvictedBlocks(evictedBlocks).build();<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>  @Override<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>  public double getCompactionPressure() {<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>    double max = 0;<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>    for (Region region : onlineRegions.values()) {<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>      for (Store store : region.getStores()) {<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        double normCount = store.getCompactionPressure();<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>        if (normCount &gt; max) {<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>          max = normCount;<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>        }<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>      }<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>    }<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>    return max;<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>  }<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span><a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>  @Override<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    return hMemManager;<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>  public MemStoreFlusher getMemStoreFlusher() {<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>    return cacheFlusher;<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>  }<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span><a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>  /**<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>   * For testing<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>   */<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>  @InterfaceAudience.Private<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>  public boolean walRollRequestFinished() {<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    return this.walRoller.walRollFinished();<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>  }<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span><a name="line.3369"></a>
-<span class="sourceLineNo">3370</span>  @Override<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>  public ThroughputController getFlushThroughputController() {<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>    return flushThroughputController;<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>  }<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span><a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>  @Override<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>  public double getFlushPressure() {<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>      // return 0 during RS initialization<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>      return 0.0;<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>    }<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>  }<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span><a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>  @Override<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>    ThroughputController old = this.flushThroughputController;<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>    if (old != null) {<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>      old.stop("configuration change");<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>    }<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>    try {<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>      Superusers.initialize(newConf);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>    } catch (IOException e) {<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>    }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>    // update region server coprocessor if the configuration has changed.<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>    if (<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>      CoprocessorConfigurationUtil.checkConfigurationChange(getConfiguration(), newConf,<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>        CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY)<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>    ) {<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>      LOG.info("Update region server coprocessors because the configuration has changed");<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>      this.rsHost = new RegionServerCoprocessorHost(this, newConf);<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>    }<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>  }<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span><a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>  @Override<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>  public MetricsRegionServer getMetrics() {<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>    return metricsRegionServer;<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>  }<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span><a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>  @Override<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>    return this.secureBulkLoadManager;<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>  }<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span><a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>  @Override<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>    final Abortable abort) {<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>    final LockServiceClient client =<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>      new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  }<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span><a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>  @Override<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>  }<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span><a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>  @Override<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>    return this.rsSpaceQuotaManager;<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>  }<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span><a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>  @Override<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>    Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>      return false;<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>    }<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>      // the current server could be stopping.<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      return false;<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>    }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>    try {<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>        rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>      rss.reportFileArchival(null, request);<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>    } catch (ServiceException se) {<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>        if (LOG.isTraceEnabled()) {<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>            + " This will be retried.", ioe);<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>        }<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>        return false;<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>      }<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>      if (rssStub == rss) {<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>        rssStub = null;<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>      }<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>      // re-create the stub if we failed to report the archival<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>      createRegionServerStatusStub(true);<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>      return false;<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>    }<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>    return true;<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>  }<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span><a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  }<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span><a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>    procedureResultReporter.complete(procId, error);<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>  }<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span><a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    for (;;) {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>      rss = rssStub;<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>      if (rss != null) {<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>        break;<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>      }<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>      createRegionServerStatusStub();<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>    }<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>    try {<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>      rss.reportProcedureDone(null, request);<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>    } catch (ServiceException se) {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      if (rssStub == rss) {<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>        rssStub = null;<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>      }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>    }<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>  }<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span><a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>  /**<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>   * Will ignore the open/close region procedures which already submitted or executed. When master<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>   * had unfinished open/close region procedure and restarted, new active master may send duplicate<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>   * open/close region request to regionserver. The open/close request is submitted to a thread pool<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>   * and execute. So first need a cache for submitted open/close region procedures. After the<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>   * open/close region request executed and report region transition succeed, cache it in executed<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>   * region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds. See<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>   * HBASE-22404 for more details.<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>   * @param procId the id of the open/close region procedure<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>   * @return true if the procedure can be submitted.<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>   */<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>  boolean submitRegionProcedure(long procId) {<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>    if (procId == -1) {<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>      return true;<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>    }<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>    // Ignore the region procedures which already submitted.<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>    if (previous != null) {<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>      return false;<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>    }<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>    // Ignore the region procedures which already executed.<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>      return false;<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    }<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>    return true;<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>  }<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span><a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>  /**<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>   * @param procId the id of the open/close region procedure<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>   */<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>  public void finishRegionProcedure(long procId) {<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>    executedRegionProcedures.put(procId, procId);<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>    submittedRegionProcedures.remove(procId);<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  }<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span><a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>  /**<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>   * Force to terminate region server when abort timeout.<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>   */<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span><a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>    public SystemExitWhenAbortTimeout() {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>    }<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span><a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>    @Override<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>    public void run() {<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      LOG.warn("Aborting region server timed out, terminating forcibly"<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>        + " and does not wait for any running shutdown hooks or finalizers to finish their work."<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>        + " Thread dump to stdout.");<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>      Runtime.getRuntime().halt(1);<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>    }<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>  }<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span><a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>  @InterfaceAudience.Private<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>    return compactedFileDischarger;<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>  }<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span><a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>  /**<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>   * Return pause time configured in {@link HConstants#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME}}<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>   * @return pause time<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>   */<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>  @InterfaceAudience.Private<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>  public long getRetryPauseTime() {<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>    return this.retryPauseTime;<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>  }<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span><a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>  @Override<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>  public Optional&lt;ServerName&gt; getActiveMaster() {<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>    return Optional.ofNullable(masterAddressTracker.getMasterAddress());<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>  }<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span><a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>  @Override<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>  public List&lt;ServerName&gt; getBackupMasters() {<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>    return masterAddressTracker.getBackupMasters();<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>  }<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span><a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>  @Override<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>  public Iterator&lt;ServerName&gt; getBootstrapNodes() {<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>    return bootstrapNodeManager.getBootstrapNodes().iterator();<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>  }<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span><a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>  @Override<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>  public List&lt;HRegionLocation&gt; getMetaLocations() {<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>    return metaRegionLocationCache.getMetaRegionLocations();<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  }<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span><a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  @Override<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>  protected NamedQueueRecorder createNamedQueueRecord() {<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>    return NamedQueueRecorder.getInstance(conf);<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>  }<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span><a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>  @Override<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>  protected boolean clusterMode() {<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>    // this method will be called in the constructor of super class, so we can not return masterless<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>    // directly here, as it will always be false.<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>    return !conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span><a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>  @InterfaceAudience.Private<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>  public BrokenStoreFileCleaner getBrokenStoreFileCleaner() {<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>    return brokenStoreFileCleaner;<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>  }<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span><a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  @InterfaceAudience.Private<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public RSMobFileCleanerChore getRSMobFileCleanerChore() {<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    return rsMobFileCleanerChore;<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  }<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span><a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  RSSnapshotVerifier getRsSnapshotVerifier() {<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>    return rsSnapshotVerifier;<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>  }<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span><a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  @Override<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>  protected void stopChores() {<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>    shutdownChore(nonceManagerChore);<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>    shutdownChore(compactionChecker);<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>    shutdownChore(compactedFileDischarger);<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>    shutdownChore(periodicFlusher);<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>    shutdownChore(healthCheckChore);<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>    shutdownChore(executorStatusChore);<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>    shutdownChore(storefileRefresher);<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    shutdownChore(fsUtilizationChore);<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>    shutdownChore(namedQueueServiceChore);<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>    shutdownChore(brokenStoreFileCleaner);<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>    shutdownChore(rsMobFileCleanerChore);<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>    shutdownChore(replicationMarkerChore);<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>  }<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span><a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>  @Override<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>  public RegionReplicationBufferManager getRegionReplicationBufferManager() {<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>    return regionReplicationBufferManager;<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>  }<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>}<a name="line.3639"></a>
+<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameStringPair;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService;<a name="line.214"></a>
+<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;<a name="line.215"></a>
+<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdResponse;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>/**<a name="line.231"></a>
+<span class="sourceLineNo">232</span> * HRegionServer makes a set of HRegions available to clients. It checks in with the HMaster. There<a name="line.232"></a>
+<span class="sourceLineNo">233</span> * are many HRegionServers in a single HBase deployment.<a name="line.233"></a>
+<span class="sourceLineNo">234</span> */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.235"></a>
+<span class="sourceLineNo">236</span>@SuppressWarnings({ "deprecation" })<a name="line.236"></a>
+<span class="sourceLineNo">237</span>public class HRegionServer extends HBaseServerBase&lt;RSRpcServices&gt;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  implements RegionServerServices, LastSequenceId {<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  private static final Logger LOG = LoggerFactory.getLogger(HRegionServer.class);<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
+<span class="sourceLineNo">243</span>   * For testing only! Set to true to skip notifying region assignment to master .<a name="line.243"></a>
+<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  @InterfaceAudience.Private<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "MS_SHOULD_BE_FINAL")<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public static boolean TEST_SKIP_REPORTING_TRANSITION = false;<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span>  /**<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * A map from RegionName to current action in progress. Boolean value indicates: true - if open<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   * region action in progress false - if close region action in progress<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  private final ConcurrentMap&lt;byte[], Boolean&gt; regionsInTransitionInRS =<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    new ConcurrentSkipListMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<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>   * Used to cache the open/close region procedures which already submitted. See<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   * {@link #submitRegionProcedure(long)}.<a name="line.258"></a>
+<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  private final ConcurrentMap&lt;Long, Long&gt; submittedRegionProcedures = new ConcurrentHashMap&lt;&gt;();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  /**<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * Used to cache the open/close region procedures which already executed. See<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   * {@link #submitRegionProcedure(long)}.<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  private final Cache&lt;Long, Long&gt; executedRegionProcedures =<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    CacheBuilder.newBuilder().expireAfterAccess(600, TimeUnit.SECONDS).build();<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  /**<a name="line.268"></a>
+<span class="sourceLineNo">269</span>   * Used to cache the moved-out regions<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   */<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private final Cache&lt;String, MovedRegionInfo&gt; movedRegionInfoCache = CacheBuilder.newBuilder()<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    .expireAfterWrite(movedRegionCacheExpiredTime(), TimeUnit.MILLISECONDS).build();<a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span>  private MemStoreFlusher cacheFlusher;<a name="line.274"></a>
+<span class="sourceLineNo">275</span><a name="line.275"></a>
+<span class="sourceLineNo">276</span>  private HeapMemoryManager hMemManager;<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>  // Replication services. If no replication, this handler will be null.<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  private boolean sameReplicationSourceAndSink;<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  // Compactions<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  private CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the encoded region name.<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * All access should be synchronized.<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.290"></a>
+<span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   * Lock for gating access to {@link #onlineRegions}. TODO: If this map is gated by a lock, does it<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * need to be a ConcurrentHashMap?<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>   * Map of encoded region names to the DataNode locations they should be hosted on We store the<a name="line.298"></a>
+<span class="sourceLineNo">299</span>   * value as Address since InetSocketAddress is required by the HDFS API (create() that takes<a name="line.299"></a>
+<span class="sourceLineNo">300</span>   * favored nodes as hints for placing file blocks). We could have used ServerName here as the<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * value class, but we'd need to convert it to InetSocketAddress at some point before the HDFS API<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * call, and it seems a bit weird to store ServerName since ServerName refers to RegionServers and<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * here we really mean DataNode locations. We don't store it as InetSocketAddress here because the<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * conversion on demand from Address to InetSocketAddress will guarantee the resolution results<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   * will be fresh when we need it.<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  private final Map&lt;String, Address[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>  private LeaseManager leaseManager;<a name="line.309"></a>
+<span class="sourceLineNo">310</span><a name="line.310"></a>
+<span class="sourceLineNo">311</span>  private volatile boolean dataFsOk;<a name="line.311"></a>
+<span class="sourceLineNo">312</span><a name="line.312"></a>
+<span class="sourceLineNo">313</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  // Default abort timeout is 1200 seconds for safe<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  // Will run this task when abort timeout<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>  // A state before we go into stopped state. At this stage we're closing user<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  // space regions.<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  private boolean stopping = false;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  private volatile boolean killed = false;<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span>  private final int threadWakeFrequency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private final int compactionCheckFrequency;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private final int flushCheckFrequency;<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  // Stub to do region server status calls against the master.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  private RpcClient rpcClient;<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  private JvmPauseMonitor pauseMonitor;<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span>  private RSSnapshotVerifier rsSnapshotVerifier;<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  /** region server process name */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  public static final String REGIONSERVER = "regionserver";<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span>  private MetricsRegionServer metricsRegionServer;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * Check for compactions requests.<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   */<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   */<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private ScheduledChore periodicFlusher;<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  private volatile WALFactory walFactory;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>  private LogRoller walRoller;<a name="line.361"></a>
+<span class="sourceLineNo">362</span><a name="line.362"></a>
+<span class="sourceLineNo">363</span>  // A thread which calls reportProcedureDone<a name="line.363"></a>
+<span class="sourceLineNo">364</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>  // flag set after we're done setting up server threads<a name="line.366"></a>
+<span class="sourceLineNo">367</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span>  // master address tracker<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  // Log Splitting Worker<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  private SplitLogWorker splitLogWorker;<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private final int shortOperationTimeout;<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  // Time to pause if master says 'please hold'<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  private final long retryPauseTime;<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.380"></a>
+<span class="sourceLineNo">381</span><a name="line.381"></a>
+<span class="sourceLineNo">382</span>  private NamedQueueServiceChore namedQueueServiceChore = null;<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  // Block cache<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private BlockCache blockCache;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  // The cache for mob files<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  private MobFileCache mobFileCache;<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>  /** The health check chore. */<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  private HealthCheckChore healthCheckChore;<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  /** The Executor status collect chore. */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private ExecutorStatusChore executorStatusChore;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>  /** The nonce manager chore. */<a name="line.395"></a>
+<span class="sourceLineNo">396</span>  private ScheduledChore nonceManagerChore;<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span>  /**<a name="line.400"></a>
+<span class="sourceLineNo">401</span>   * @deprecated since 2.4.0 and will be removed in 4.0.0. Use<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   *             {@link HRegionServer#UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY} instead.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-24667"&gt;HBASE-24667&lt;/a&gt;<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  @Deprecated<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    "hbase.regionserver.hostname.disable.master.reversedns";<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  /**<a name="line.410"></a>
+<span class="sourceLineNo">411</span>   * HBASE-18226: This config and hbase.unsafe.regionserver.hostname are mutually exclusive.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * Exception will be thrown if both are used.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  final static String UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    "hbase.unsafe.regionserver.hostname.disable.master.reversedns";<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>  /**<a name="line.418"></a>
+<span class="sourceLineNo">419</span>   * Unique identifier for the cluster we are a part of.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   */<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  private String clusterId;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  // chore for refreshing store files for secondary regions<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private StorefileRefresherChore storefileRefresher;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  private volatile RegionServerCoprocessorHost rsHost;<a name="line.426"></a>
+<span class="sourceLineNo">427</span><a name="line.427"></a>
+<span class="sourceLineNo">428</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>  /**<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent in the<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * case where client doesn't receive the response from a successful operation and retries. We<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * track the successful ops for some time via a nonce sent by client and handle duplicate<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * operations (currently, by failing them; in future we might use MVCC to return result). Nonces<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * are also recovered from WAL during, recovery; however, the caveats (from HBASE-3787) are: - WAL<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * recovery is optimized, and under high load we won't read nearly nonce-timeout worth of past<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   * records. If we don't read the records, we don't read and recover the nonces. Some WALs within<a name="line.440"></a>
+<span class="sourceLineNo">441</span>   * nonce-timeout at recovery may not even be present due to rolling/cleanup. - There's no WAL<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * recovery during normal region move, so nonces will not be transfered. We can have separate<a name="line.442"></a>
+<span class="sourceLineNo">443</span>   * additional "Nonce WAL". It will just contain bunch of numbers and won't be flushed on main path<a name="line.443"></a>
+<span class="sourceLineNo">444</span>   * - because WAL itself also contains nonces, if we only flush it before memstore flush, for a<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * given nonce we will either see it in the WAL (if it was never flushed to disk, it will be part<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   * of recovery), or we'll see it as part of the nonce log (or both occasionally, which doesn't<a name="line.446"></a>
+<span class="sourceLineNo">447</span>   * matter). Nonce log file can be deleted after the latest nonce in it expired. It can also be<a name="line.447"></a>
+<span class="sourceLineNo">448</span>   * recovered during move.<a name="line.448"></a>
+<span class="sourceLineNo">449</span>   */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  final ServerNonceManager nonceManager;<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  private BrokenStoreFileCleaner brokenStoreFileCleaner;<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  private RSMobFileCleanerChore rsMobFileCleanerChore;<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span>  @InterfaceAudience.Private<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private volatile ThroughputController flushThroughputController;<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.463"></a>
+<span class="sourceLineNo">464</span><a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private BootstrapNodeManager bootstrapNodeManager;<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>  /**<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * True if this RegionServer is coming up in a cluster where there is no Master; means it needs to<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   * just come up and make do without a Master to talk to: e.g. in test or HRegionServer is doing<a name="line.469"></a>
+<span class="sourceLineNo">470</span>   * other than its usual duties: e.g. as an hollowed-out host whose only purpose is as a<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Replication-stream sink; see HBASE-18846 for more. TODO: can this replace<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  private final boolean masterless;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>  /** regionserver codec list **/<a name="line.477"></a>
+<span class="sourceLineNo">478</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.478"></a>
+<span class="sourceLineNo">479</span><a name="line.479"></a>
+<span class="sourceLineNo">480</span>  // A timer to shutdown the process if abort takes too long<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  private Timer abortMonitor;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>  private RegionReplicationBufferManager regionReplicationBufferManager;<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>  /*<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * Chore that creates replication marker rows.<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   */<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private ReplicationMarkerChore replicationMarkerChore;<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  /**<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * Starts a HRegionServer at the default location.<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * &lt;p/&gt;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * Don't start any services or managers in here in the Constructor. Defer till after we register<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * with the Master as much as possible. See {@link #startServices}.<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   */<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    super(conf, "RegionServer"); // thread name<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    final Span span = TraceUtil.createSpan("HRegionServer.cxtor");<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      this.dataFsOk = true;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      this.masterless = !clusterMode();<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      HFile.checkHFileVersion(this.conf);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      checkCodecs(this.conf);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.505"></a>
+<span class="sourceLineNo">506</span><a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // Disable usage of meta replicas in the regionserver<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>      // Config'ed params<a name="line.509"></a>
+<span class="sourceLineNo">510</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span>      this.retryPauseTime = conf.getLong(HConstants.HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME,<a name="line.520"></a>
+<span class="sourceLineNo">521</span>        HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME);<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>      blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      mobFileCache = new MobFileCache(conf);<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>      rsSnapshotVerifier = new RSSnapshotVerifier(conf);<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span>      uncaughtExceptionHandler =<a name="line.530"></a>
+<span class="sourceLineNo">531</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.533"></a>
+<span class="sourceLineNo">534</span>      if (!this.masterless) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>        masterAddressTracker.start();<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      } else {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>        masterAddressTracker = null;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      }<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      this.rpcServices.start(zooKeeper);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      span.setStatus(StatusCode.OK);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    } catch (Throwable t) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      // cause of failed startup is lost.<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      TraceUtil.setError(span, t);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>      LOG.error("Failed construction RegionServer", t);<a name="line.546"></a>
+<span class="sourceLineNo">547</span>      throw t;<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    } finally {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      span.end();<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    }<a name="line.550"></a>
+<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>  // HMaster should override this method to load the specific config for master<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  @Override<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    String hostname = conf.get(UNSAFE_RS_HOSTNAME_KEY);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    if (conf.getBoolean(UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.558"></a>
+<span class="sourceLineNo">559</span>        String msg = UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and "<a name="line.559"></a>
+<span class="sourceLineNo">560</span>          + UNSAFE_RS_HOSTNAME_KEY + " are mutually exclusive. Do not set "<a name="line.560"></a>
+<span class="sourceLineNo">561</span>          + UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " to true while "<a name="line.561"></a>
+<span class="sourceLineNo">562</span>          + UNSAFE_RS_HOSTNAME_KEY + " is used";<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        throw new IOException(msg);<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      } else {<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        return rpcServices.getSocketAddress().getHostName();<a name="line.565"></a>
+<span class="sourceLineNo">566</span>      }<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    } else {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      return hostname;<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
+<span class="sourceLineNo">571</span><a name="line.571"></a>
+<span class="sourceLineNo">572</span>  @Override<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span>  @Override<a name="line.578"></a>
+<span class="sourceLineNo">579</span>  protected String getProcessName() {<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    return REGIONSERVER;<a name="line.580"></a>
+<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>  @Override<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  protected boolean canCreateBaseZNode() {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    return !clusterMode();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span>  @Override<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  protected boolean canUpdateTableDescriptor() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    return false;<a name="line.590"></a>
+<span class="sourceLineNo">591</span>  }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span>  @Override<a name="line.593"></a>
+<span class="sourceLineNo">594</span>  protected boolean cacheTableDescriptor() {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    return false;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  }<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return new RSRpcServices(this);<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  @Override<a name="line.602"></a>
+<span class="sourceLineNo">603</span>  protected void configureInfoServer(InfoServer infoServer) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  @Override<a name="line.608"></a>
+<span class="sourceLineNo">609</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    return RSDumpServlet.class;<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
+<span class="sourceLineNo">614</span>   * Used by {@link RSDumpServlet} to generate debugging information.<a name="line.614"></a>
+<span class="sourceLineNo">615</span>   */<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  public void dumpRowLocks(final PrintWriter out) {<a name="line.616"></a>
+<span class="sourceLineNo">617</span>    StringBuilder sb = new StringBuilder();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    for (HRegion region : getRegions()) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      if (region.getLockedRows().size() &gt; 0) {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        for (HRegion.RowLockContext rowLockContext : region.getLockedRows().values()) {<a name="line.620"></a>
+<span class="sourceLineNo">621</span>          sb.setLength(0);<a name="line.621"></a>
+<span class="sourceLineNo">622</span>          sb.append(region.getTableDescriptor().getTableName()).append(",")<a name="line.622"></a>
+<span class="sourceLineNo">623</span>            .append(region.getRegionInfo().getEncodedName()).append(",");<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          sb.append(rowLockContext.toString());<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          out.println(sb);<a name="line.625"></a>
+<span class="sourceLineNo">626</span>        }<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      }<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>  }<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span>  @Override<a name="line.631"></a>
+<span class="sourceLineNo">632</span>  public boolean registerService(Service instance) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    // No stacking of instances is allowed for a single executorService name<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        + " already registered, rejecting request from " + instance);<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      return false;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    }<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    if (LOG.isDebugEnabled()) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      LOG.debug(<a name="line.644"></a>
+<span class="sourceLineNo">645</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>    }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    return true;<a name="line.647"></a>
+<span class="sourceLineNo">648</span>  }<a name="line.648"></a>
+<span class="sourceLineNo">649</span><a name="line.649"></a>
+<span class="sourceLineNo">650</span>  /**<a name="line.650"></a>
+<span class="sourceLineNo">651</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   */<a name="line.652"></a>
+<span class="sourceLineNo">653</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    // check to see if the codec list is available:<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    String[] codecs = c.getStrings(REGIONSERVER_CODEC, (String[]) null);<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    if (codecs == null) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      return;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>    for (String codec : codecs) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.660"></a>
+<span class="sourceLineNo">661</span>        throw new IOException(<a name="line.661"></a>
+<span class="sourceLineNo">662</span>          "Compression codec " + codec + " not supported, aborting RS construction");<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>  public String getClusterId() {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    return this.clusterId;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>  }<a name="line.669"></a>
+<span class="sourceLineNo">670</span><a name="line.670"></a>
+<span class="sourceLineNo">671</span>  /**<a name="line.671"></a>
+<span class="sourceLineNo">672</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.672"></a>
+<span class="sourceLineNo">673</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.673"></a>
+<span class="sourceLineNo">674</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.674"></a>
+<span class="sourceLineNo">675</span>   */<a name="line.675"></a>
+<span class="sourceLineNo">676</span>  private void preRegistrationInitialization() {<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    final Span span = TraceUtil.createSpan("HRegionServer.preRegistrationInitialization");<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      initializeZooKeeper();<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      setupClusterConnection();<a name="line.680"></a>
+<span class="sourceLineNo">681</span>      bootstrapNodeManager = new BootstrapNodeManager(asyncClusterConnection, masterAddressTracker);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      regionReplicationBufferManager = new RegionReplicationBufferManager(this);<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      // Setup RPC client for master communication<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      span.setStatus(StatusCode.OK);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>    } catch (Throwable t) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>      // Call stop if error or process will stick around for ever since server<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      // puts up non-daemon threads.<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      TraceUtil.setError(span, t);<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      this.rpcServices.stop();<a name="line.690"></a>
+<span class="sourceLineNo">691</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    } finally {<a name="line.692"></a>
+<span class="sourceLineNo">693</span>      span.end();<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>  }<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span>  /**<a name="line.697"></a>
+<span class="sourceLineNo">698</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.698"></a>
+<span class="sourceLineNo">699</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.699"></a>
+<span class="sourceLineNo">700</span>   * &lt;p&gt;<a name="line.700"></a>
+<span class="sourceLineNo">701</span>   * Finally open long-living server short-circuit connection.<a name="line.701"></a>
+<span class="sourceLineNo">702</span>   */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      justification = "cluster Id znode read would give us correct response")<a name="line.704"></a>
+<span class="sourceLineNo">705</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    // Nothing to do in here if no Master in the mix.<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    if (this.masterless) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      return;<a name="line.708"></a>
+<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
+<span class="sourceLineNo">710</span><a name="line.710"></a>
+<span class="sourceLineNo">711</span>    // Create the master address tracker, register with zk, and start it. Then<a name="line.711"></a>
+<span class="sourceLineNo">712</span>    // block until a master is available. No point in starting up if no master<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    // running.<a name="line.713"></a>
+<span class="sourceLineNo">714</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.714"></a>
+<span class="sourceLineNo">715</span><a name="line.715"></a>
+<span class="sourceLineNo">716</span>    // Wait on cluster being up. Master will set this flag up in zookeeper<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    // when ready.<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.718"></a>
+<span class="sourceLineNo">719</span><a name="line.719"></a>
+<span class="sourceLineNo">720</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    if (clusterId == null) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      // Retrieve clusterId<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      // Since cluster status is now up<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      // ID should have already been set by HMaster<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      try {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        if (clusterId == null) {<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          this.abort("Cluster ID has not been set");<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>        LOG.info("ClusterId : " + clusterId);<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      } catch (KeeperException e) {<a name="line.731"></a>
+<span class="sourceLineNo">732</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.732"></a>
+<span class="sourceLineNo">733</span>      }<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>    if (isStopped() || isAborted()) {<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      return; // No need for further initialization<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    }<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>    // watch for snapshots and other procedures<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    try {<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.742"></a>
+<span class="sourceLineNo">743</span>      rspmHost.loadProcedures(conf);<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      rspmHost.initialize(this);<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    } catch (KeeperException e) {<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.746"></a>
+<span class="sourceLineNo">747</span>    }<a name="line.747"></a>
+<span class="sourceLineNo">748</span>  }<a name="line.748"></a>
+<span class="sourceLineNo">749</span><a name="line.749"></a>
+<span class="sourceLineNo">750</span>  /**<a name="line.750"></a>
+<span class="sourceLineNo">751</span>   * Utilty method to wait indefinitely on a znode availability while checking if the region server<a name="line.751"></a>
+<span class="sourceLineNo">752</span>   * is shut down<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * @param tracker znode tracker to use<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   * @throws IOException          any IO exception, plus if the RS is stopped<a name="line.754"></a>
+<span class="sourceLineNo">755</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.755"></a>
+<span class="sourceLineNo">756</span>   */<a name="line.756"></a>
+<span class="sourceLineNo">757</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    throws IOException, InterruptedException {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      if (this.stopped) {<a name="line.760"></a>
+<span class="sourceLineNo">761</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.761"></a>
+<span class="sourceLineNo">762</span>      }<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
+<span class="sourceLineNo">765</span><a name="line.765"></a>
+<span class="sourceLineNo">766</span>  /** Returns True if the cluster is up. */<a name="line.766"></a>
+<span class="sourceLineNo">767</span>  @Override<a name="line.767"></a>
+<span class="sourceLineNo">768</span>  public boolean isClusterUp() {<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    return this.masterless<a name="line.769"></a>
+<span class="sourceLineNo">770</span>      || (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.770"></a>
+<span class="sourceLineNo">771</span>  }<a name="line.771"></a>
+<span class="sourceLineNo">772</span><a name="line.772"></a>
+<span class="sourceLineNo">773</span>  private void initializeReplicationMarkerChore() {<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    boolean replicationMarkerEnabled =<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      conf.getBoolean(REPLICATION_MARKER_ENABLED_KEY, REPLICATION_MARKER_ENABLED_DEFAULT);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    // If replication or replication marker is not enabled then return immediately.<a name="line.776"></a>
+<span class="sourceLineNo">777</span>    if (replicationMarkerEnabled) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>      int period = conf.getInt(REPLICATION_MARKER_CHORE_DURATION_KEY,<a name="line.778"></a>
+<span class="sourceLineNo">779</span>        REPLICATION_MARKER_CHORE_DURATION_DEFAULT);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>      replicationMarkerChore = new ReplicationMarkerChore(this, this, period, conf);<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    }<a name="line.781"></a>
+<span class="sourceLineNo">782</span>  }<a name="line.782"></a>
+<span class="sourceLineNo">783</span><a name="line.783"></a>
+<span class="sourceLineNo">784</span>  /**<a name="line.784"></a>
+<span class="sourceLineNo">785</span>   * The HRegionServer sticks in this loop until closed.<a name="line.785"></a>
+<span class="sourceLineNo">786</span>   */<a name="line.786"></a>
+<span class="sourceLineNo">787</span>  @Override<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  public void run() {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    if (isStopped()) {<a name="line.789"></a>
+<span class="sourceLineNo">790</span>      LOG.info("Skipping run; stopped");<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      return;<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    }<a name="line.792"></a>
+<span class="sourceLineNo">793</span>    try {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      preRegistrationInitialization();<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    } catch (Throwable e) {<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      abort("Fatal exception during initialization", e);<a name="line.797"></a>
+<span class="sourceLineNo">798</span>    }<a name="line.798"></a>
+<span class="sourceLineNo">799</span><a name="line.799"></a>
+<span class="sourceLineNo">800</span>    try {<a name="line.800"></a>
+<span class="sourceLineNo">801</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        installShutdownHook();<a name="line.802"></a>
+<span class="sourceLineNo">803</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.803"></a>
+<span class="sourceLineNo">804</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>        // Try and register with the Master; tell it we are here. Break if server is stopped or<a name="line.807"></a>
+<span class="sourceLineNo">808</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.808"></a>
+<span class="sourceLineNo">809</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.809"></a>
+<span class="sourceLineNo">810</span>        // come up.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>        LOG.debug("About to register with Master.");<a name="line.811"></a>
+<span class="sourceLineNo">812</span>        TraceUtil.trace(() -&gt; {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>          RetryCounterFactory rcf =<a name="line.813"></a>
+<span class="sourceLineNo">814</span>            new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.814"></a>
+<span class="sourceLineNo">815</span>          RetryCounter rc = rcf.create();<a name="line.815"></a>
+<span class="sourceLineNo">816</span>          while (keepLooping()) {<a name="line.816"></a>
+<span class="sourceLineNo">817</span>            RegionServerStartupResponse w = reportForDuty();<a name="line.817"></a>
+<span class="sourceLineNo">818</span>            if (w == null) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>              long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.819"></a>
+<span class="sourceLineNo">820</span>              LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>              this.sleeper.sleep(sleepTime);<a name="line.821"></a>
+<span class="sourceLineNo">822</span>            } else {<a name="line.822"></a>
+<span class="sourceLineNo">823</span>              handleReportForDutyResponse(w);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>              break;<a name="line.824"></a>
+<span class="sourceLineNo">825</span>            }<a name="line.825"></a>
+<span class="sourceLineNo">826</span>          }<a name="line.826"></a>
+<span class="sourceLineNo">827</span>        }, "HRegionServer.registerWithMaster");<a name="line.827"></a>
+<span class="sourceLineNo">828</span>      }<a name="line.828"></a>
+<span class="sourceLineNo">829</span><a name="line.829"></a>
+<span class="sourceLineNo">830</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.830"></a>
+<span class="sourceLineNo">831</span>        TraceUtil.trace(() -&gt; {<a name="line.831"></a>
+<span class="sourceLineNo">832</span>          // start the snapshot handler and other procedure handlers,<a name="line.832"></a>
+<span class="sourceLineNo">833</span>          // since the server is ready to run<a name="line.833"></a>
+<span class="sourceLineNo">834</span>          if (this.rspmHost != null) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>            this.rspmHost.start();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          }<a name="line.836"></a>
+<span class="sourceLineNo">837</span>          // Start the Quota Manager<a name="line.837"></a>
+<span class="sourceLineNo">838</span>          if (this.rsQuotaManager != null) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>            rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.839"></a>
+<span class="sourceLineNo">840</span>          }<a name="line.840"></a>
+<span class="sourceLineNo">841</span>          if (this.rsSpaceQuotaManager != null) {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>            this.rsSpaceQuotaManager.start();<a name="line.842"></a>
+<span class="sourceLineNo">843</span>          }<a name="line.843"></a>
+<span class="sourceLineNo">844</span>        }, "HRegionServer.startup");<a name="line.844"></a>
+<span class="sourceLineNo">845</span>      }<a name="line.845"></a>
+<span class="sourceLineNo">846</span><a name="line.846"></a>
+<span class="sourceLineNo">847</span>      // We registered with the Master. Go into run mode.<a name="line.847"></a>
+<span class="sourceLineNo">848</span>      long lastMsg = EnvironmentEdgeManager.currentTime();<a name="line.848"></a>
+<span class="sourceLineNo">849</span>      long oldRequestCount = -1;<a name="line.849"></a>
+<span class="sourceLineNo">850</span>      // The main run loop.<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.851"></a>
+<span class="sourceLineNo">852</span>        if (!isClusterUp()) {<a name="line.852"></a>
+<span class="sourceLineNo">853</span>          if (onlineRegions.isEmpty()) {<a name="line.853"></a>
+<span class="sourceLineNo">854</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.854"></a>
+<span class="sourceLineNo">855</span>          } else if (!this.stopping) {<a name="line.855"></a>
+<span class="sourceLineNo">856</span>            this.stopping = true;<a name="line.856"></a>
+<span class="sourceLineNo">857</span>            LOG.info("Closing user regions");<a name="line.857"></a>
+<span class="sourceLineNo">858</span>            closeUserRegions(isAborted());<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          } else {<a name="line.859"></a>
+<span class="sourceLineNo">860</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.860"></a>
+<span class="sourceLineNo">861</span>            if (allUserRegionsOffline) {<a name="line.861"></a>
+<span class="sourceLineNo">862</span>              // Set stopped if no more write requests tp meta tables<a name="line.862"></a>
+<span class="sourceLineNo">863</span>              // since last time we went around the loop. Any open<a name="line.863"></a>
+<span class="sourceLineNo">864</span>              // meta regions will be closed on our way out.<a name="line.864"></a>
+<span class="sourceLineNo">865</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>                stop("Stopped; only catalog regions remaining online");<a name="line.866"></a>
+<span class="sourceLineNo">867</span>                break;<a name="line.867"></a>
+<span class="sourceLineNo">868</span>              }<a name="line.868"></a>
+<span class="sourceLineNo">869</span>              oldRequestCount = getWriteRequestCount();<a name="line.869"></a>
+<span class="sourceLineNo">870</span>            } else {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>              // Make sure all regions have been closed -- some regions may<a name="line.871"></a>
+<span class="sourceLineNo">872</span>              // have not got it because we were splitting at the time of<a name="line.872"></a>
+<span class="sourceLineNo">873</span>              // the call to closeUserRegions.<a name="line.873"></a>
+<span class="sourceLineNo">874</span>              closeUserRegions(this.abortRequested.get());<a name="line.874"></a>
+<span class="sourceLineNo">875</span>            }<a name="line.875"></a>
+<span class="sourceLineNo">876</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.876"></a>
+<span class="sourceLineNo">877</span>          }<a name="line.877"></a>
+<span class="sourceLineNo">878</span>        }<a name="line.878"></a>
+<span class="sourceLineNo">879</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.879"></a>
+<span class="sourceLineNo">880</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>          tryRegionServerReport(lastMsg, now);<a name="line.881"></a>
+<span class="sourceLineNo">882</span>          lastMsg = EnvironmentEdgeManager.currentTime();<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        }<a name="line.883"></a>
+<span class="sourceLineNo">884</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.884"></a>
+<span class="sourceLineNo">885</span>          this.sleeper.sleep();<a name="line.885"></a>
+<span class="sourceLineNo">886</span>        }<a name="line.886"></a>
+<span class="sourceLineNo">887</span>      } // for<a name="line.887"></a>
+<span class="sourceLineNo">888</span>    } catch (Throwable t) {<a name="line.888"></a>
+<span class="sourceLineNo">889</span>      if (!rpcServices.checkOOME(t)) {<a name="line.889"></a>
+<span class="sourceLineNo">890</span>        String prefix = t instanceof YouAreDeadException ? "" : "Unhandled: ";<a name="line.890"></a>
+<span class="sourceLineNo">891</span>        abort(prefix + t.getMessage(), t);<a name="line.891"></a>
+<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
+<span class="sourceLineNo">894</span><a name="line.894"></a>
+<span class="sourceLineNo">895</span>    final Span span = TraceUtil.createSpan("HRegionServer exiting main loop");<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>      if (this.leaseManager != null) {<a name="line.897"></a>
+<span class="sourceLineNo">898</span>        this.leaseManager.closeAfterLeasesExpire();<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      }<a name="line.899"></a>
+<span class="sourceLineNo">900</span>      if (this.splitLogWorker != null) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        splitLogWorker.stop();<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      }<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      stopInfoServer();<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      // Send cache a shutdown.<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      if (blockCache != null) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        blockCache.shutdown();<a name="line.906"></a>
+<span class="sourceLineNo">907</span>      }<a name="line.907"></a>
+<span class="sourceLineNo">908</span>      if (mobFileCache != null) {<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        mobFileCache.shutdown();<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      }<a name="line.910"></a>
+<span class="sourceLineNo">911</span><a name="line.911"></a>
+<span class="sourceLineNo">912</span>      // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      // TODO: Should we check they are alive? If OOME could have exited already<a name="line.913"></a>
+<span class="sourceLineNo">914</span>      if (this.hMemManager != null) {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>        this.hMemManager.stop();<a name="line.915"></a>
+<span class="sourceLineNo">916</span>      }<a name="line.916"></a>
+<span class="sourceLineNo">917</span>      if (this.cacheFlusher != null) {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>        this.cacheFlusher.interruptIfNecessary();<a name="line.918"></a>
+<span class="sourceLineNo">919</span>      }<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      if (this.compactSplitThread != null) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>        this.compactSplitThread.interruptIfNecessary();<a name="line.921"></a>
+<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
+<span class="sourceLineNo">923</span><a name="line.923"></a>
+<span class="sourceLineNo">924</span>      // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      if (rspmHost != null) {<a name="line.925"></a>
+<span class="sourceLineNo">926</span>        rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.926"></a>
+<span class="sourceLineNo">927</span>      }<a name="line.927"></a>
+<span class="sourceLineNo">928</span><a name="line.928"></a>
+<span class="sourceLineNo">929</span>      if (this.killed) {<a name="line.929"></a>
+<span class="sourceLineNo">930</span>        // Just skip out w/o closing regions. Used when testing.<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      } else if (abortRequested.get()) {<a name="line.931"></a>
+<span class="sourceLineNo">932</span>        if (this.dataFsOk) {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>          closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.933"></a>
+<span class="sourceLineNo">934</span>        }<a name="line.934"></a>
+<span class="sourceLineNo">935</span>        LOG.info("aborting server " + this.serverName);<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      } else {<a name="line.936"></a>
+<span class="sourceLineNo">937</span>        closeUserRegions(abortRequested.get());<a name="line.937"></a>
+<span class="sourceLineNo">938</span>        LOG.info("stopping server " + this.serverName);<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      }<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      regionReplicationBufferManager.stop();<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      closeClusterConnection();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      // Closing the compactSplit thread before closing meta regions<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.943"></a>
+<span class="sourceLineNo">944</span>        if (!abortRequested.get() || this.dataFsOk) {<a name="line.944"></a>
+<span class="sourceLineNo">945</span>          if (this.compactSplitThread != null) {<a name="line.945"></a>
+<span class="sourceLineNo">946</span>            this.compactSplitThread.join();<a name="line.946"></a>
+<span class="sourceLineNo">947</span>            this.compactSplitThread = null;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>          }<a name="line.948"></a>
+<span class="sourceLineNo">949</span>          closeMetaTableRegions(abortRequested.get());<a name="line.949"></a>
+<span class="sourceLineNo">950</span>        }<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      }<a name="line.951"></a>
+<span class="sourceLineNo">952</span><a name="line.952"></a>
+<span class="sourceLineNo">953</span>      if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.953"></a>
+<span class="sourceLineNo">954</span>        waitOnAllRegionsToClose(abortRequested.get());<a name="line.954"></a>
+<span class="sourceLineNo">955</span>        LOG.info("stopping server " + this.serverName + "; all regions closed.");<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>      // Stop the quota manager<a name="line.958"></a>
+<span class="sourceLineNo">959</span>      if (rsQuotaManager != null) {<a name="line.959"></a>
+<span class="sourceLineNo">960</span>        rsQuotaManager.stop();<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      }<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      if (rsSpaceQuotaManager != null) {<a name="line.962"></a>
+<span class="sourceLineNo">963</span>        rsSpaceQuotaManager.stop();<a name="line.963"></a>
+<span class="sourceLineNo">964</span>        rsSpaceQuotaManager = null;<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      }<a name="line.965"></a>
+<span class="sourceLineNo">966</span><a name="line.966"></a>
+<span class="sourceLineNo">967</span>      // flag may be changed when closing regions throws exception.<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      if (this.dataFsOk) {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>        shutdownWAL(!abortRequested.get());<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>      // Make sure the proxy is down.<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      if (this.rssStub != null) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>        this.rssStub = null;<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      }<a name="line.975"></a>
+<span class="sourceLineNo">976</span>      if (this.lockStub != null) {<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        this.lockStub = null;<a name="line.977"></a>
+<span class="sourceLineNo">978</span>      }<a name="line.978"></a>
+<span class="sourceLineNo">979</span>      if (this.rpcClient != null) {<a name="line.979"></a>
+<span class="sourceLineNo">980</span>        this.rpcClient.close();<a name="line.980"></a>
+<span class="sourceLineNo">981</span>      }<a name="line.981"></a>
+<span class="sourceLineNo">982</span>      if (this.leaseManager != null) {<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        this.leaseManager.close();<a name="line.983"></a>
+<span class="sourceLineNo">984</span>      }<a name="line.984"></a>
+<span class="sourceLineNo">985</span>      if (this.pauseMonitor != null) {<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        this.pauseMonitor.stop();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
+<span class="sourceLineNo">988</span><a name="line.988"></a>
+<span class="sourceLineNo">989</span>      if (!killed) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        stopServiceThreads();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span><a name="line.992"></a>
+<span class="sourceLineNo">993</span>      if (this.rpcServices != null) {<a name="line.993"></a>
+<span class="sourceLineNo">994</span>        this.rpcServices.stop();<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      }<a name="line.995"></a>
+<span class="sourceLineNo">996</span><a name="line.996"></a>
+<span class="sourceLineNo">997</span>      try {<a name="line.997"></a>
+<span class="sourceLineNo">998</span>        deleteMyEphemeralNode();<a name="line.998"></a>
+<span class="sourceLineNo">999</span>      } catch (KeeperException.NoNodeException nn) {<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>        // pass<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>      } catch (KeeperException e) {<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>        LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>      }<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>      // We may have failed to delete the znode at the previous step, but<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      // we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>      ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span><a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>      closeZooKeeper();<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      closeTableDescriptors();<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      span.setStatus(StatusCode.OK);<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>    } finally {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      span.end();<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>    }<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>  }<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span><a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>  private boolean containsMetaTableRegions() {<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>  }<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span><a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>  private boolean areAllUserRegionsOffline() {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>    if (getNumberOfOnlineRegions() &gt; 2) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>      return false;<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>    boolean allUserRegionsOffline = true;<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>    for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>        allUserRegionsOffline = false;<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        break;<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>    return allUserRegionsOffline;<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>  }<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span><a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>  /** Returns Current write count for all online regions. */<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>  private long getWriteRequestCount() {<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>    long writeCount = 0;<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>    return writeCount;<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>  @InterfaceAudience.Private<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    throws IOException {<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    if (rss == null) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>      // the current server could be stopping.<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>      return;<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>    }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    final Span span = TraceUtil.createSpan("HRegionServer.tryRegionServerReport");<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>      request.setLoad(sl);<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>      rss.regionServerReport(null, request.build());<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>      span.setStatus(StatusCode.OK);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    } catch (ServiceException se) {<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>        // This will be caught and handled as a fatal error in run()<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>        TraceUtil.setError(span, ioe);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        throw ioe;<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>      }<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      if (rssStub == rss) {<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>        rssStub = null;<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>      }<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      TraceUtil.setError(span, se);<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>      // Method blocks until new master is found or we are stopped<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      createRegionServerStatusStub(true);<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    } finally {<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      span.end();<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><a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>  /**<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>   * @param regionSizeStore The store containing region sizes<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>   */<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    if (rss == null) {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>      // the current server could be stopping.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>      return true;<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    try {<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    } catch (ServiceException se) {<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>          + " This will be retried.", ioe);<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>        return true;<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      if (rssStub == rss) {<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>        rssStub = null;<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      }<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      createRegionServerStatusStub(true);<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>            return false;<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>          }<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>        }<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      }<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    return true;<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>  }<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span><a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>  /**<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>   * @param rss             The stub to send to the Master<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>   * @param regionSizeStore The store containing region sizes<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>   */<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>    RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    RegionSpaceUseReportRequest request =<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    // Record the number of size reports sent<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>    if (metricsRegionServer != null) {<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    }<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * @param regionSizes The size in bytes of regions<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   * @return The corresponding protocol buffer message.<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>   */<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>    }<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    return request.build();<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>  }<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span><a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>  /**<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse} protobuf<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>   * message.<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>   * @param regionInfo  The RegionInfo<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>   * @return The protocol buffer<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>   */<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>    return RegionSpaceUse.newBuilder()<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>      .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>      .setRegionSize(Objects.requireNonNull(sizeInBytes)).build();<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>  }<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span><a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    throws IOException {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    // per second, and other metrics As long as metrics are part of ServerLoad it's best to use<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>    // the wrapper to compute those numbers in one place.<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    // history.<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    long usedMemory = -1L;<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>    long maxMemory = -1L;<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    if (usage != null) {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>      usedMemory = usage.getUsed();<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    serverLoad.setUsedHeapMB((int) (usedMemory / 1024 / 1024));<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    serverLoad.setReadRequestsCount(this.metricsRegionServerImpl.getReadRequestsCount());<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>    serverLoad.setWriteRequestsCount(this.metricsRegionServerImpl.getWriteRequestsCount());<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>    Coprocessor.Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    for (String coprocessor : coprocessors) {<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>    }<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    for (HRegion region : regions) {<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>      if (region.getCoprocessorHost() != null) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).build());<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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>        .getCoprocessors()) {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<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>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    if (this.infoServer != null) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    } else {<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>      serverLoad.setInfoServerPort(-1);<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>    MetricsUserAggregateSource userSource =<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    if (userSource != null) {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>      }<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span><a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      // always refresh first to get the latest value<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      if (rLoad != null) {<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>          .getReplicationLoadSourceEntries()) {<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>        }<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>      }<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>    } else {<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      if (replicationSourceHandler != null) {<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>        if (rLoad != null) {<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>            .getReplicationLoadSourceEntries()) {<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>          }<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>        }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>      }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>      if (replicationSinkHandler != null) {<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>        if (rLoad != null) {<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>        }<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>      }<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>    }<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span><a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    TaskMonitor.get().getTasks().forEach(task -&gt; serverLoad.addTasks(ClusterStatusProtos.ServerTask<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>      .newBuilder().setDescription(task.getDescription())<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      .setStatus(task.getStatus() != null ? task.getStatus() : "")<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>      .setState(ClusterStatusProtos.ServerTask.State.valueOf(task.getState().name()))<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      .setStartTime(task.getStartTime()).setCompletionTime(task.getCompletionTimestamp()).build()));<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span><a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    return serverLoad.build();<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>  }<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span><a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>    StringBuilder sb = new StringBuilder();<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    for (Region r : this.onlineRegions.values()) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>      if (sb.length() &gt; 0) {<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        sb.append(", ");<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>      }<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>    }<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>    return sb.toString();<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>  }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span><a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   * Wait on regions close.<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   */<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>    // Wait till all regions are closed before going out.<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>    int lastCount = -1;<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>    long previousLogTime = 0;<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>    boolean interrupted = false;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>    try {<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      while (!onlineRegions.isEmpty()) {<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>        int count = getNumberOfOnlineRegions();<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>        // Only print a message if the count of regions has changed.<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>        if (count != lastCount) {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>          // Log every second at most<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>            lastCount = count;<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>            // Only print out regions still closing if a small number else will<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>            // swamp the log.<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>              LOG.debug("Online Regions=" + this.onlineRegions);<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>        }<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>        // protect against the case where an open comes in after we start the<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>        // iterator of onlineRegions to close all user regions.<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>          if (<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>            !this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes())<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>              &amp;&amp; !closedRegions.contains(hri.getEncodedName())<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>          ) {<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>            closedRegions.add(hri.getEncodedName());<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>            // Don't update zk with this close transition; pass false.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>            closeRegionIgnoreErrors(hri, abort);<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>        // No regions in RIT, we could stop waiting now.<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>          if (!onlineRegions.isEmpty()) {<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>            LOG.info("We were exiting though online regions are not empty,"<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>              + " because some regions failed closing");<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>          }<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>          break;<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>        } else {<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream()<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>            .map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>        }<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>        if (sleepInterrupted(200)) {<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>          interrupted = true;<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>        }<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>      }<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>    } finally {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>      if (interrupted) {<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        Thread.currentThread().interrupt();<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>      }<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>    }<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  }<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span><a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    boolean interrupted = false;<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    try {<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      Thread.sleep(millis);<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    } catch (InterruptedException e) {<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>      LOG.warn("Interrupted while sleeping");<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>      interrupted = true;<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    }<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    return interrupted;<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>  private void shutdownWAL(final boolean close) {<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    if (this.walFactory != null) {<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>      try {<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>        if (close) {<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>          walFactory.close();<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>        } else {<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>          walFactory.shutdown();<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>        }<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>      } catch (Throwable e) {<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>      }<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    }<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>  }<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span><a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>  /**<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>   * @param c Extra configuration.<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>   */<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>    throws IOException {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>    try {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      boolean updateRootDir = false;<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        String key = e.getName();<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        // The hostname the master sees us as.<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV,<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>            rpcServices.getSocketAddress().getPort(), this.startcode);<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>          String expectedHostName = rpcServices.getSocketAddress().getHostName();<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          // if Master use-ip is enabled, RegionServer use-ip will be enabled by default even if it<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>          // is set to disable. so we will use the ip of the RegionServer to compare with the<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          // hostname passed by the Master, see HBASE-27304 for details.<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>          if (<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>            StringUtils.isBlank(useThisHostnameInstead) &amp;&amp; getActiveMaster().isPresent()<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>              &amp;&amp; InetAddresses.isInetAddress(getActiveMaster().get().getHostname())<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          ) {<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>            expectedHostName = rpcServices.getSocketAddress().getAddress().getHostAddress();<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>          }<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>          boolean isHostnameConsist = StringUtils.isBlank(useThisHostnameInstead)<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>            ? hostnameFromMasterPOV.equals(expectedHostName)<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>            : hostnameFromMasterPOV.equals(useThisHostnameInstead);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>          if (!isHostnameConsist) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>            String msg = "Master passed us a different hostname to use; was="<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>              + (StringUtils.isBlank(useThisHostnameInstead)<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>                ? rpcServices.getSocketAddress().getHostName()<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>                : this.useThisHostnameInstead)<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>              + ", but now=" + hostnameFromMasterPOV;<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>            LOG.error(msg);<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>            throw new IOException(msg);<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>          }<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>          continue;<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        }<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>        String value = e.getValue();<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            updateRootDir = true;<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><a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>        if (LOG.isDebugEnabled()) {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>        this.conf.set(key, value);<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>      }<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      createMyEphemeralNode();<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span><a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>      if (updateRootDir) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        initializeFileSystem();<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span><a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      // hack! Maps DFSClient =&gt; RegionServer for logs. HDFS made this<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>      }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>      // Save it in a file, this will allow to see if we crash<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span><a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>      setupWALAndReplication();<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      final MetricsTable metricsTable =<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      this.metricsRegionServer =<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>        new MetricsRegionServer(metricsRegionServerImpl, conf, metricsTable);<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>      pauseMonitor.start();<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span><a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>        startServices();<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      }<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // or make sense of it.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      startReplicationService();<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span><a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // Set up ZK<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.getSocketAddress()<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>        + ", sessionid=0x"<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        + Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span><a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>      // Wake up anyone waiting for this server to online<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>      synchronized (online) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>        online.set(true);<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        online.notifyAll();<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>      }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>    } catch (Throwable e) {<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>      stop("Failed initialization");<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"), "Region server startup failed");<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>    } finally {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>      sleeper.skipSleepCycle();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>    }<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>  private void startHeapMemoryManager() {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>    if (this.blockCache != null) {<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>      this.hMemManager =<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>      this.hMemManager.start(getChoreService());<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>    }<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  }<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>  }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span><a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>  }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span><a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>  @Override<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>    return regionServerAccounting;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span><a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>  // Round the size with KB or MB.<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  // A trick here is that if the sizeInBytes is less than sizeUnit, we will round the size to 1<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>  // instead of 0 if it is not 0, to avoid some schedulers think the region has no data. See<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>  // HBASE-26340 for more details on why this is important.<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>  private static int roundSize(long sizeInByte, int sizeUnit) {<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    if (sizeInByte == 0) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>      return 0;<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>    } else if (sizeInByte &lt; sizeUnit) {<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>      return 1;<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    } else {<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      return (int) Math.min(sizeInByte / sizeUnit, Integer.MAX_VALUE);<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>    }<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>  }<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>   * @param r               Region to get RegionLoad for.<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>   * @param regionLoadBldr  the RegionLoad.Builder, can be null<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>   * @return RegionLoad instance.<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>   */<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>    RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>    int stores = 0;<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>    int storefiles = 0;<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    int storeRefCount = 0;<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    long storeUncompressedSize = 0L;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>    long storefileSize = 0L;<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>    long storefileIndexSize = 0L;<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>    long rootLevelIndexSize = 0L;<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    long totalStaticIndexSize = 0L;<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>    long totalStaticBloomSize = 0L;<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    long totalCompactingKVs = 0L;<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    long currentCompactedKVs = 0L;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>    stores += storeList.size();<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    for (HStore store : storeList) {<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      storefiles += store.getStorefilesCount();<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>      storeRefCount += currentStoreRefCount;<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      maxCompactedStoreFileRefCount =<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>        Math.max(maxCompactedStoreFileRefCount, currentMaxCompactedStoreFileRefCount);<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>      storeUncompressedSize += store.getStoreSizeUncompressed();<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      storefileSize += store.getStorefilesSize();<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      // TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>      storefileIndexSize += store.getStorefilesRootLevelIndexSize();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>      if (progress != null) {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>      }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      rootLevelIndexSize += store.getStorefilesRootLevelIndexSize();<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      totalStaticIndexSize += store.getTotalStaticIndexSize();<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>      totalStaticBloomSize += store.getTotalStaticBloomSize();<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>    }<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span><a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>    int unitMB = 1024 * 1024;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    int unitKB = 1024;<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>    int memstoreSizeMB = roundSize(r.getMemStoreDataSize(), unitMB);<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>    int storeUncompressedSizeMB = roundSize(storeUncompressedSize, unitMB);<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>    int storefileSizeMB = roundSize(storefileSize, unitMB);<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>    int storefileIndexSizeKB = roundSize(storefileIndexSize, unitKB);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>    int rootLevelIndexSizeKB = roundSize(rootLevelIndexSize, unitKB);<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>    int totalStaticIndexSizeKB = roundSize(totalStaticIndexSize, unitKB);<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>    int totalStaticBloomSizeKB = roundSize(totalStaticBloomSize, unitKB);<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span><a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>    if (regionLoadBldr == null) {<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>    if (regionSpecifier == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>    }<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span><a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build()).setStores(stores)<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>      .setStorefiles(storefiles).setStoreRefCount(storeRefCount)<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB).setStorefileSizeMB(storefileSizeMB)<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      .setMemStoreSizeMB(memstoreSizeMB).setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB).setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      .setReadRequestsCount(r.getReadRequestsCount()).setCpRequestsCount(r.getCpRequestsCount())<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      .setWriteRequestsCount(r.getWriteRequestsCount()).setTotalCompactingKVs(totalCompactingKVs)<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      .setCurrentCompactedKVs(currentCompactedKVs).setDataLocality(dataLocality)<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      .setDataLocalityForSsd(dataLocalityForSsd).setBlocksLocalWeight(blocksLocalWeight)<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight).setBlocksTotalWeight(blocksTotalWeight)<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      .setCompactionState(ProtobufUtil.createCompactionStateForRegionLoad(r.getCompactionState()))<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    return regionLoadBldr.build();<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>  }<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span><a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>    userLoadBldr.setUserName(user);<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>    userSource.getClientMetrics().values().stream()<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      .map(clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>        .setHostName(clientMetrics.getHostName())<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>        .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>        .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>      .forEach(userLoadBldr::addClientMetrics);<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    return userLoadBldr.build();<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>  }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>  }<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span><a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>  /**<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>   */<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>    private final HRegionServer instance;<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>    private final int majorCompactPriority;<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>    // Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>    // immediately upon region server startup<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>    private long iteration = 1;<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span><a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      this.instance = h;<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span><a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      /*<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>       * MajorCompactPriority is configurable. If not set, the compaction will use default priority.<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>       */<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>      this.majorCompactPriority = this.instance.conf<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>        .getInt("hbase.regionserver.compactionChecker.majorCompactPriority", DEFAULT_PRIORITY);<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>    @Override<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>    protected void chore() {<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>        // Skip compaction if region is read only<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        if (r == null || r.isReadOnly()) {<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>          continue;<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span><a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        HRegion hr = (HRegion) r;<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        for (HStore s : hr.stores.values()) {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>          try {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>            assert multiplier &gt; 0;<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>            if (iteration % multiplier != 0) {<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>              continue;<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>            }<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>            if (s.needsCompaction()) {<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>                getName() + " requests compaction");<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>              s.triggerMajorCompaction();<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>              if (<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>                majorCompactPriority == DEFAULT_PRIORITY<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>                  || majorCompactPriority &gt; hr.getCompactPriority()<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>              ) {<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>                  getName() + " requests major compaction; use default priority", Store.NO_PRIORITY,<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>                  CompactionLifeCycleTracker.DUMMY, null);<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>              } else {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>                  getName() + " requests major compaction; use configured priority",<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>                  this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>              }<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>            }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>          } catch (IOException e) {<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>          }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>        }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>      }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>    }<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>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    private final HRegionServer server;<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>    private final long rangeOfDelayMs;<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>      this.server = server;<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span><a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      final long configuredRangeOfDelay = server.getConfiguration()<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>        .getInt("hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    }<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span><a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    @Override<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    protected void chore() {<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>        if (r == null) {<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>          continue;<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>        }<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>          if (requester != null) {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>            long delay = ThreadLocalRandom.current().nextLong(rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>            // Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>            // is a balanced write-load on the regions in a table, we might end up<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>            // overwhelming the filesystem with too many flushes at once.<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>            if (requester.requestDelayedFlush(r, delay)) {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms", getName(),<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>                r.getRegionInfo().getRegionNameAsString(), whyFlush.toString(), delay);<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>            }<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>          }<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        }<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>      }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>    }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>  }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span><a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>  /**<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>   * Report the status of the server. A server is online once all the startup is completed (setting<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>   * up filesystem, starting executorService threads, etc.). This method is designed mostly to be<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>   * useful in tests.<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>   * @return true if online, false if not.<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>   */<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>  public boolean isOnline() {<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>    return online.get();<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>  }<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span><a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>  /**<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>   * be hooked up to WAL.<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>   */<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>  private void setupWALAndReplication() throws IOException {<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    WALFactory factory = new WALFactory(conf, serverName.toString(), this, true);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>    Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>    String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span><a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>    Path logDir = new Path(walRootDir, logName);<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    LOG.debug("logDir={}", logDir);<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>    if (this.walFs.exists(logDir)) {<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      throw new RegionServerRunningException(<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        "Region server has already created directory at " + this.serverName.toString());<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>    }<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>    // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>    // region servers.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>    if (!this.walFs.mkdirs(logDir)) {<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      throw new IOException("Can not create wal directory " + logDir);<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>    }<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>    // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>    createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir, factory);<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span><a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>    WALActionsListener walEventListener = getWALEventTrackerListener(conf);<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    if (walEventListener != null &amp;&amp; factory.getWALProvider() != null) {<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      factory.getWALProvider().addWALActionsListener(walEventListener);<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>    }<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    this.walFactory = factory;<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>  }<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span><a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>  private WALActionsListener getWALEventTrackerListener(Configuration conf) {<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    if (conf.getBoolean(WAL_EVENT_TRACKER_ENABLED_KEY, WAL_EVENT_TRACKER_ENABLED_DEFAULT)) {<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>      WALEventTrackerListener listener =<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>        new WALEventTrackerListener(conf, getNamedQueueRecorder(), getServerName());<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>      return listener;<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>    }<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    return null;<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>   * Start up replication source and sink handlers.<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>   */<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>  private void startReplicationService() throws IOException {<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    } else {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>      if (this.replicationSourceHandler != null) {<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>      }<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>      if (this.replicationSinkHandler != null) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      }<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span><a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>  /** Returns Master address tracker instance. */<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    return this.masterAddressTracker;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>  }<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span><a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  /**<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>   * Start maintenance Threads, Server, Worker and lease checker threads. Start all threads we need<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>   * to run. This is called after we've successfully registered with the Master. Install an<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * UncaughtExceptionHandler that calls abort of RegionServer if we get an unhandled exception. We<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   * cannot set the handler on all threads. Server's internal Listener thread is off limits. For<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>   * Server, if an OOME, it waits a while then retries. Meantime, a flush or a compaction that tries<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * to run should trigger same critical condition and the shutdown will run. On its way out, this<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   * server will shut down Server. Leases are sort of inbetween. It has an internal thread that<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>   * while it inherits from Chore, it keeps its own internal stop mechanism so needs to be stopped<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>   * by this hosting server. Worker logs the exception and exits.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>   */<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>  private void startServices() throws IOException {<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>      initializeThreads();<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    }<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>    this.secureBulkLoadManager.start();<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span><a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    // Health checker thread.<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>    if (isHealthCheckerConfigured()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>    }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>    // Executor status collect thread.<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>    if (<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>      this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>    ) {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>      int sleepTime =<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>        this.conf.getInt(ExecutorStatusChore.WAKE_FREQ, ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>        this.metricsRegionServer.getMetricsSource());<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>    }<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span><a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>    this.walRoller = new LogRoller(this);<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span><a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>    int cleanerInterval = conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>    this.compactedFileDischarger = new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span><a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    // Start executor services<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>    final int openRegionThreads = conf.getInt("hbase.regionserver.executor.openregion.threads", 3);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>      .setExecutorType(ExecutorType.RS_OPEN_REGION).setCorePoolSize(openRegionThreads));<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>    final int openMetaThreads = conf.getInt("hbase.regionserver.executor.openmeta.threads", 1);<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>      .setExecutorType(ExecutorType.RS_OPEN_META).setCorePoolSize(openMetaThreads));<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>    final int openPriorityRegionThreads =<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3);<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    executorService.startExecutorService(<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_OPEN_PRIORITY_REGION)<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>        .setCorePoolSize(openPriorityRegionThreads));<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>    final int closeRegionThreads =<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      conf.getInt("hbase.regionserver.executor.closeregion.threads", 3);<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>      .setExecutorType(ExecutorType.RS_CLOSE_REGION).setCorePoolSize(closeRegionThreads));<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    final int closeMetaThreads = conf.getInt("hbase.regionserver.executor.closemeta.threads", 1);<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>      .setExecutorType(ExecutorType.RS_CLOSE_META).setCorePoolSize(closeMetaThreads));<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      final int storeScannerParallelSeekThreads =<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>        conf.getInt("hbase.storescanner.parallel.seek.threads", 10);<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>      executorService.startExecutorService(<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>        executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_PARALLEL_SEEK)<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          .setCorePoolSize(storeScannerParallelSeekThreads).setAllowCoreThreadTimeout(true));<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>    }<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    final int logReplayOpsThreads =<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span>      conf.getInt(HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER);<a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    executorService.startExecutorService(<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_LOG_REPLAY_OPS)<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>        .setCorePoolSize(logReplayOpsThreads).setAllowCoreThreadTimeout(true));<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>    // Start the threads for compacted files discharger<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>    final int compactionDischargerThreads =<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>      conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10);<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>      .setExecutorType(ExecutorType.RS_COMPACTED_FILES_DISCHARGER)<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>      .setCorePoolSize(compactionDischargerThreads));<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>      final int regionReplicaFlushThreads =<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>        conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>          conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>      executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>        .setExecutorType(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS)<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>        .setCorePoolSize(regionReplicaFlushThreads));<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>    }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>    final int refreshPeerThreads =<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2);<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>      .setExecutorType(ExecutorType.RS_REFRESH_PEER).setCorePoolSize(refreshPeerThreads));<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    final int replaySyncReplicationWALThreads =<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1);<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>    executorService.startExecutorService(executorService.new ExecutorConfig()<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>      .setExecutorType(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL)<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>      .setCorePoolSize(replaySyncReplicationWALThreads));<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>    final int switchRpcThrottleThreads =<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1);<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>    executorService.startExecutorService(<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_SWITCH_RPC_THROTTLE)<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>        .setCorePoolSize(switchRpcThrottleThreads));<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    final int claimReplicationQueueThreads =<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>      conf.getInt("hbase.regionserver.executor.claim.replication.queue.threads", 1);<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>    executorService.startExecutorService(<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_CLAIM_REPLICATION_QUEUE)<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>        .setCorePoolSize(claimReplicationQueueThreads));<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>    final int rsSnapshotOperationThreads =<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>      conf.getInt("hbase.regionserver.executor.snapshot.operations.threads", 3);<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>    executorService.startExecutorService(<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>      executorService.new ExecutorConfig().setExecutorType(ExecutorType.RS_SNAPSHOT_OPERATIONS)<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        .setCorePoolSize(rsSnapshotOperationThreads));<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span><a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>      uncaughtExceptionHandler);<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>    if (this.cacheFlusher != null) {<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>    }<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span><a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>    if (this.compactionChecker != null) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>      choreService.scheduleChore(compactionChecker);<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>    if (this.periodicFlusher != null) {<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      choreService.scheduleChore(periodicFlusher);<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    }<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    if (this.healthCheckChore != null) {<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>      choreService.scheduleChore(healthCheckChore);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    }<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>    if (this.executorStatusChore != null) {<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      choreService.scheduleChore(executorStatusChore);<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>    }<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>    if (this.nonceManagerChore != null) {<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>    }<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>    if (this.storefileRefresher != null) {<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      choreService.scheduleChore(storefileRefresher);<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>    }<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>    if (this.fsUtilizationChore != null) {<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    }<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>    if (this.namedQueueServiceChore != null) {<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      choreService.scheduleChore(namedQueueServiceChore);<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    }<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>    if (this.brokenStoreFileCleaner != null) {<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      choreService.scheduleChore(brokenStoreFileCleaner);<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    }<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>    if (this.rsMobFileCleanerChore != null) {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      choreService.scheduleChore(rsMobFileCleanerChore);<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    }<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    if (replicationMarkerChore != null) {<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>      LOG.info("Starting replication marker chore");<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>      choreService.scheduleChore(replicationMarkerChore);<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>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    // an unhandled exception, it will just exit.<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      uncaughtExceptionHandler);<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span><a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>    // Create the log splitting worker and start it<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>    // tasks even after current task is preempted after a split task times out.<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>      conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>      conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>    if (<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      this.csm != null<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>        &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK, DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>    ) {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>      splitLogWorker.start();<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>      LOG.debug("SplitLogWorker started");<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    }<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    // Memstore services.<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>    startHeapMemoryManager();<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>    // Call it after starting HeapMemoryManager.<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    initializeMemStoreChunkCreator(hMemManager);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  }<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span><a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  private void initializeThreads() {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    // Cache flushing thread.<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span><a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    // Compaction thread<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span><a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    final boolean walEventTrackerEnabled =<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>      conf.getBoolean(WAL_EVENT_TRACKER_ENABLED_KEY, WAL_EVENT_TRACKER_ENABLED_DEFAULT);<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span><a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>    if (isSlowLogTableEnabled || walEventTrackerEnabled) {<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>      // default chore duration: 10 min<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      // After &lt;version number&gt;, we will remove hbase.slowlog.systable.chore.duration conf property<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>      final int slowLogChoreDuration = conf.getInt(HConstants.SLOW_LOG_SYS_TABLE_CHORE_DURATION_KEY,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>        DEFAULT_SLOW_LOG_SYS_TABLE_CHORE_DURATION);<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span><a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>      final int namedQueueChoreDuration =<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        conf.getInt(NAMED_QUEUE_CHORE_DURATION_KEY, NAMED_QUEUE_CHORE_DURATION_DEFAULT);<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>      // Considering min of slowLogChoreDuration and namedQueueChoreDuration<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>      int choreDuration = Math.min(slowLogChoreDuration, namedQueueChoreDuration);<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span><a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>      namedQueueServiceChore = new NamedQueueServiceChore(this, choreDuration,<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>        this.namedQueueRecorder, this.getConnection());<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>    }<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span><a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>    if (this.nonceManager != null) {<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>    }<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span><a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    // Setup the Quota Manager<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span><a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    }<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span><a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>    boolean onlyMetaRefresh = false;<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    int storefileRefreshPeriod =<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>      conf.getInt(StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>    if (storefileRefreshPeriod == 0) {<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      storefileRefreshPeriod =<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>        conf.getInt(StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>      onlyMetaRefresh = true;<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    }<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>      this.storefileRefresher =<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>        new StorefileRefresherChore(storefileRefreshPeriod, onlyMetaRefresh, this, this);<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span><a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    int brokenStoreFileCleanerPeriod =<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>      conf.getInt(BrokenStoreFileCleaner.BROKEN_STOREFILE_CLEANER_PERIOD,<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>        BrokenStoreFileCleaner.DEFAULT_BROKEN_STOREFILE_CLEANER_PERIOD);<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    int brokenStoreFileCleanerDelay =<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      conf.getInt(BrokenStoreFileCleaner.BROKEN_STOREFILE_CLEANER_DELAY,<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>        BrokenStoreFileCleaner.DEFAULT_BROKEN_STOREFILE_CLEANER_DELAY);<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>    double brokenStoreFileCleanerDelayJitter =<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>      conf.getDouble(BrokenStoreFileCleaner.BROKEN_STOREFILE_CLEANER_DELAY_JITTER,<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>        BrokenStoreFileCleaner.DEFAULT_BROKEN_STOREFILE_CLEANER_DELAY_JITTER);<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>    double jitterRate =<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>      (ThreadLocalRandom.current().nextDouble() - 0.5D) * brokenStoreFileCleanerDelayJitter;<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    long jitterValue = Math.round(brokenStoreFileCleanerDelay * jitterRate);<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    this.brokenStoreFileCleaner =<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      new BrokenStoreFileCleaner((int) (brokenStoreFileCleanerDelay + jitterValue),<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>        brokenStoreFileCleanerPeriod, this, conf, this);<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span><a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>    this.rsMobFileCleanerChore = new RSMobFileCleanerChore(this);<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span><a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>    registerConfigurationObservers();<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    initializeReplicationMarkerChore();<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>  }<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span><a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>  private void registerConfigurationObservers() {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    // Register Replication if possible, as now we support recreating replication peer storage, for<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>    // migrating across different replication peer storages online<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    if (replicationSourceHandler instanceof ConfigurationObserver) {<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>      configurationManager.registerObserver((ConfigurationObserver) replicationSourceHandler);<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    }<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    if (!sameReplicationSourceAndSink &amp;&amp; replicationSinkHandler instanceof ConfigurationObserver) {<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>      configurationManager.registerObserver((ConfigurationObserver) replicationSinkHandler);<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>    }<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    configurationManager.registerObserver(this);<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>  }<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span><a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>  /*<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>   * Verify that server is healthy<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>   */<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>  private boolean isHealthy() {<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>    if (!dataFsOk) {<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>      // File system problem<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      return false;<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>    }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>    // Verify that all threads are alive<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>      &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>      &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>    if (!healthy) {<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    }<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>    return healthy;<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>  }<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span><a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>  @Override<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>    return walFactory.getWALs();<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>  }<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span><a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  @Override<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    if (this.walRoller != null) {<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>      this.walRoller.addWAL(wal);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    }<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>    return wal;<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>  }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span><a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>  public LogRoller getWalRoller() {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>    return walRoller;<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>  }<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span><a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  WALFactory getWalFactory() {<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>    return walFactory;<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>  @Override<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>  public void stop(final String msg) {<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>  }<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span><a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>  /**<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>   * Stops the regionserver.<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>   * @param msg   Status message<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>   * @param force True if this is a regionserver abort<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>   * @param user  The user executing the stop request, or null if no user is associated<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>   */<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    if (!this.stopped) {<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>      if (this.rsHost != null) {<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>        // when forced via abort don't allow CPs to override<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>        try {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>          this.rsHost.preStop(msg, user);<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>        } catch (IOException ioe) {<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>          if (!force) {<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>            return;<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>          }<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>        }<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>      }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      this.stopped = true;<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>      LOG.info("STOPPED: " + msg);<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>      // Wakes run() if it is sleeping<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>      sleeper.skipSleepCycle();<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><a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>  public void waitForServerOnline() {<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>      synchronized (online) {<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>        try {<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>          online.wait(msgInterval);<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>        } catch (InterruptedException ie) {<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>          Thread.currentThread().interrupt();<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>          break;<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>        }<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>      }<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>    }<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>  }<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span><a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>  @Override<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>    HRegion r = context.getRegion();<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    long openProcId = context.getOpenProcId();<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>    rpcServices.checkOpen();<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>    // Skip compaction check if region is read only<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>    if (!r.isReadOnly()) {<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      for (HStore s : r.stores.values()) {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>        }<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>      }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    }<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>      LOG.error(<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>      openSeqNum = 0;<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>    // Notify master<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>    if (<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>      !reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>        openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>    ) {<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>      throw new IOException(<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>    }<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span><a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>    triggerFlushInPrimaryRegion(r);<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span><a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>  }<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span><a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>  /**<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>   * Helper method for use in tests. Skip the region transition report when there's no master around<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>   * to receive it.<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>   */<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>    final TransitionCode code = context.getCode();<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    final RegionInfo[] hris = context.getHris();<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span><a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    if (code == TransitionCode.OPENED) {<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>      if (hris[0].isMetaRegion()) {<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>        LOG.warn(<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>          "meta table location is stored in master local store, so we can not skip reporting");<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        return false;<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      } else {<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        try {<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>            serverName, openSeqNum, masterSystemTime);<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        } catch (IOException e) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>          LOG.info("Failed to update meta", e);<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>          return false;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>        }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>      }<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    }<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>    return true;<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>  }<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span><a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>  private ReportRegionStateTransitionRequest<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    createReportRegionStateTransitionRequest(final RegionStateTransitionContext context) {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>    final TransitionCode code = context.getCode();<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>    final RegionInfo[] hris = context.getHris();<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>    final long[] procIds = context.getProcIds();<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span><a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      ReportRegionStateTransitionRequest.newBuilder();<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    transition.setTransitionCode(code);<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>    }<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>    for (RegionInfo hri : hris) {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>    }<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>    for (long procId : procIds) {<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>      transition.addProcId(procId);<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    }<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span><a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>    return builder.build();<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  }<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span><a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>  @Override<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      return skipReportingTransition(context);<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>    }<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>    final ReportRegionStateTransitionRequest request =<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>      createReportRegionStateTransitionRequest(context);<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span><a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>    int tries = 0;<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>    long pauseTime = this.retryPauseTime;<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>    // HRegionServer does down.<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>      try {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>        if (rss == null) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>          createRegionServerStatusStub();<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>          continue;<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>        }<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>        ReportRegionStateTransitionResponse response =<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>          rss.reportRegionStateTransition(null, request);<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>        if (response.hasErrorMessage()) {<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>          break;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>        }<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>        }<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>        // NOTE: Return mid-method!!!<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>        return true;<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      } catch (ServiceException se) {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>        boolean pause = ioe instanceof ServerNotRunningYetException<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>          || ioe instanceof PleaseHoldException || ioe instanceof CallQueueTooBigException;<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>        if (pause) {<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          // Do backoff else we flood the Master with requests.<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>          pauseTime = ConnectionUtils.getPauseTime(this.retryPauseTime, tries);<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>        } else {<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>          pauseTime = this.retryPauseTime; // Reset.<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>        }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>        LOG.info("Failed report transition " + TextFormat.shortDebugString(request) + "; retry (#"<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>          + tries + ")"<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>          + (pause<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>            ? " after " + pauseTime + "ms delay (Master is coming online...)."<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>            : " immediately."),<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>          ioe);<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>        if (pause) {<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>          Threads.sleep(pauseTime);<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>        }<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>        tries++;<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>        if (rssStub == rss) {<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>          rssStub = null;<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>        }<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>      }<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>    }<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>    return false;<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>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>   */<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>      return;<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>    }<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>    TableName tn = region.getTableDescriptor().getTableName();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>    if (<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      !ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf, tn)<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>        || !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(region.conf) ||<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        // If the memstore replication not setup, we do not have to wait for observing a flush event<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>        // from primary before starting to serve reads, because gaps from replication is not<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>        // applicable,this logic is from<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>        // TableDescriptorBuilder.ModifyableTableDescriptor.setRegionMemStoreReplication by<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>        // HBASE-13063<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>        !region.getTableDescriptor().hasRegionMemStoreReplication()<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>    ) {<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>      region.setReadsEnabled(true);<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>      return;<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>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span><a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>    if (this.executorService != null) {<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>    } else {<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>        region.getRegionInfo());<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>    }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>  }<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span><a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>  @InterfaceAudience.Private<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>  public RSRpcServices getRSRpcServices() {<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>    return rpcServices;<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  }<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span><a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>  /**<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>   * Cause the server to exit without closing the regions it is serving, the log it is using and<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>   * without notifying the master. Used unit testing and on catastrophic events such as HDFS is<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>   * yanked out from under hbase or we OOME. the reason we are aborting the exception that caused<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>   * the abort, or null<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>   */<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>  @Override<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>  public void abort(String reason, Throwable cause) {<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    if (!setAbortRequested()) {<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>      // Abort already in progress, ignore the new request.<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>      LOG.debug("Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      return;<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>    }<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>    if (cause != null) {<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    } else {<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    LOG.error(HBaseMarkers.FATAL,<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      "RegionServer abort: loaded coprocessors are: " + CoprocessorHost.getLoadedCoprocessors());<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    try {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>    }<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span><a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>    try {<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>      if (cause != null) {<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>      }<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>      // Report to the master but only if we have already registered with the master.<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>        ReportRSFatalErrorRequest.Builder builder = ReportRSFatalErrorRequest.newBuilder();<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>        builder.setErrorMessage(msg);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>      }<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>    } catch (Throwable t) {<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>      LOG.warn("Unable to report fatal error to master", t);<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>    scheduleAbortTimer();<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    // shutdown should be run as the internal user<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    stop(reason, true, null);<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>  }<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span><a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>  /*<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup logs but it does<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>   * close socket in case want to bring up server on old hostname+port immediately.<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>   */<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>  @InterfaceAudience.Private<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>  protected void kill() {<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>    this.killed = true;<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>    abort("Simulated kill");<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>  }<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span><a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>  // Limits the time spent in the shutdown process.<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>  private void scheduleAbortTimer() {<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>    if (this.abortMonitor == null) {<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>      TimerTask abortTimeoutTask = null;<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>      try {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>        timerTaskCtor.setAccessible(true);<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>      } catch (Exception e) {<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>      }<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>      if (abortTimeoutTask != null) {<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>      }<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>    }<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>  }<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span><a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>  /**<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>   * Wait on all threads to finish. Presumption is that all closes and stops have already been<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>   * called.<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>   */<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>  protected void stopServiceThreads() {<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>    // clean up the scheduled chores<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>    stopChoreService();<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>    if (bootstrapNodeManager != null) {<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>      bootstrapNodeManager.stop();<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>    }<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>    if (this.cacheFlusher != null) {<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>      this.cacheFlusher.join();<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    if (this.walRoller != null) {<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>      this.walRoller.close();<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>    }<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>    if (this.compactSplitThread != null) {<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>      this.compactSplitThread.join();<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>    stopExecutorService();<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    } else {<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      if (this.replicationSourceHandler != null) {<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>      }<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>      if (this.replicationSinkHandler != null) {<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>      }<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>    }<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>  }<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span><a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>  /** Returns Return the object that implements the replication source executorService. */<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>  @Override<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    return replicationSourceHandler;<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>  }<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span><a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>  /** Returns Return the object that implements the replication sink executorService. */<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>    return replicationSinkHandler;<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>  }<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span><a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>  /**<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>   * You can break from this block by requesting the server stop.<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>   * @return master + port, or null if server has been stopped<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>   */<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    return createRegionServerStatusStub(false);<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  }<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span><a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>  /**<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>   * You can break from this block by requesting the server stop.<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>   * @return master + port, or null if server has been stopped<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>   */<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>  @InterfaceAudience.Private<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>    if (rssStub != null) {<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>      return masterAddressTracker.getMasterAddress();<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    ServerName sn = null;<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>    long previousLogTime = 0;<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>    boolean interrupted = false;<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    try {<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>      while (keepLooping()) {<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>        if (sn == null) {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>          if (!keepLooping()) {<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>            // give up with no connection.<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>            return null;<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>          }<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>            LOG.debug("No master found; retry");<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>          }<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>          if (sleepInterrupted(200)) {<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>            interrupted = true;<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>          }<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>          continue;<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>        }<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>        try {<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>          BlockingRpcChannel channel = this.rpcClient.createBlockingRpcChannel(sn,<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>            userProvider.getCurrent(), shortOperationTimeout);<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>          break;<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>        } catch (IOException e) {<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>            e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>            } else {<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>            }<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>          }<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>          if (sleepInterrupted(200)) {<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>            interrupted = true;<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>          }<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>        }<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>      }<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>    } finally {<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>      if (interrupted) {<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>        Thread.currentThread().interrupt();<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>      }<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>    }<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>    this.rssStub = intRssStub;<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>    this.lockStub = intLockStub;<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>    return sn;<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>  }<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span><a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>  /**<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>   * @return True if we should break loop because cluster is going down or this server has been<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>   *         stopped or hdfs has gone bad.<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>   */<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>  private boolean keepLooping() {<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>  }<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span><a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>  /*<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>   * Let the master know we're here Run initialization using parameters passed us by the master.<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>   * @return A Map of key/value configurations we got from the Master else null if we failed to<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>   * register.<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>   */<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>    if (this.masterless) {<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>      return RegionServerStartupResponse.getDefaultInstance();<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>    }<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>    if (masterServerName == null || rss == null) {<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>      return null;<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    }<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>    RegionServerStartupResponse result = null;<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>    try {<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>      rpcServices.requestCount.reset();<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>        + rpcServices.getSocketAddress().getPort() + ", startcode=" + this.startcode);<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>      int port = rpcServices.getSocketAddress().getPort();<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>      }<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>      request.setPort(port);<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>      request.setServerStartCode(this.startcode);<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>      request.setServerCurrentTime(now);<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>    } catch (ServiceException se) {<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync", ioe);<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>        // Re-throw IOE will cause RS to abort<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>        throw ioe;<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>        LOG.debug("Master is not running yet");<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>      } else {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>        LOG.warn("error telling master we are up", se);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      }<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      rssStub = null;<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>    }<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>    return result;<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>  @Override<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>    try {<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>        RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>      if (rss == null) { // Try to connect one more time<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>        createRegionServerStatusStub();<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>        rss = rssStub;<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>        if (rss == null) {<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>          // Still no luck, we tried<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>            .build();<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>        }<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>      }<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>        .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>        .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    } catch (ServiceException e) {<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>        .build();<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>    }<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>  }<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span><a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>  /**<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>   * Close meta region if we carry it<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>   * @param abort Whether we're running an abort.<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>   */<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span>    HRegion meta = null;<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>    try {<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>      for (Map.Entry&lt;String, HRegion&gt; e : onlineRegions.entrySet()) {<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>        if (hri.isMetaRegion()) {<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>          meta = e.getValue();<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>        }<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>        if (meta != null) {<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>          break;<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        }<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>      }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>    } finally {<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    }<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    if (meta != null) {<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>      closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>    }<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>  }<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span><a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>  /**<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   * Schedule closes on all user regions. Should be safe calling multiple times because it wont'<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   * close regions that are already closed or that are closing.<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   * @param abort Whether we're running an abort.<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   */<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>  private void closeUserRegions(final boolean abort) {<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>    try {<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>      for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>        HRegion r = e.getValue();<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>          // Don't update zk with this close transition; pass false.<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>        }<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>      }<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>    } finally {<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>    }<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>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    return this.onlineRegions;<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>  }<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span><a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>  public int getNumberOfOnlineRegions() {<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    return this.onlineRegions.size();<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>  /**<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>   * For tests, web ui and metrics. This method will only work if HRegionServer is in the same JVM<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>   * as client; HRegion cannot be serialized to cross an rpc.<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>   */<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>    return Collections.unmodifiableCollection(regions);<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>  @Override<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>  public void addRegion(HRegion region) {<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>    configurationManager.registerObserver(region);<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>  }<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span><a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>    long size) {<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>    }<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>    sortedRegions.get(size).add(region);<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>  }<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span><a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>  /**<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>   *         the biggest.<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>   */<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>    // we'll sort the regions in reverse<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>    }<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>    return sortedRegions;<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>  }<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span><a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>  /**<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>   *         biggest.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>   */<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    // we'll sort the regions in reverse<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>    }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>    return sortedRegions;<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>  }<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span><a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>  /** Returns reference to FlushRequester */<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>  @Override<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>  public FlushRequester getFlushRequester() {<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    return this.cacheFlusher;<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span><a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>  @Override<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    return this.compactSplitThread;<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>  }<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span><a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>  @Override<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>  public LeaseManager getLeaseManager() {<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>    return leaseManager;<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>  }<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span><a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>  /** Returns {@code true} when the data file system is available, {@code false} otherwise. */<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  boolean isDataFileSystemOk() {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>    return this.dataFsOk;<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>  }<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span><a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost() {<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>    return this.rsHost;<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>  }<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span><a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>  @Override<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    return this.regionsInTransitionInRS;<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>  }<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span><a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>  @Override<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>    return rsQuotaManager;<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  }<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span><a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>  //<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>  // Main program and support routines<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>  //<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>  /**<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>   * Load the replication executorService objects, if any<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>   */<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>    FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    // read in the name of the source replication class from the config file.<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span><a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>    // read in the name of the sink replication class from the config file.<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span><a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>    // only one object.<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      server.sameReplicationSourceAndSink = true;<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>    } else {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>      server.sameReplicationSourceAndSink = false;<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>    }<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>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>    Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>    Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    final Class&lt;? extends T&gt; clazz;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    try {<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>      throw new IOException("Could not find class for " + classname);<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>    return service;<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>  }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span><a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus() {<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>    if (!this.isOnline()) {<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>      return walGroupsReplicationStatus;<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>    }<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>    for (ReplicationSourceInterface source : allSources) {<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    }<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>    return walGroupsReplicationStatus;<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>  }<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span><a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>  /**<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>   */<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>  static HRegionServer constructRegionServer(final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>    final Configuration conf) {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>    try {<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>        regionServerClass.getConstructor(Configuration.class);<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>      return c.newInstance(conf);<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>    } catch (Exception e) {<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      throw new RuntimeException(<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>        "Failed construction of " + "Regionserver: " + regionServerClass.toString(), e);<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>    }<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>  }<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span><a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>  /**<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>   */<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>  public static void main(String[] args) {<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>    VersionInfo.logVersion();<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>    Configuration conf = HBaseConfiguration.create();<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>    @SuppressWarnings("unchecked")<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>      .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span><a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<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>   * Gets the online regions of the specified table. This method looks at the in-memory<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>   * onlineRegions. It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;. Only returns &lt;em&gt;online&lt;/em&gt; regions.<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>   * If a region on this table has been closed during a disable, etc., it will not be included in<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>   * the returned list. So, the returned list may not necessarily be ALL regions in this table, its<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>   * all the ONLINE regions in the table.<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>   * @param tableName table to limit the scope of the query<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>   */<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>  @Override<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>    List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>    synchronized (this.onlineRegions) {<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>      for (HRegion region : this.onlineRegions.values()) {<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>        RegionInfo regionInfo = region.getRegionInfo();<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>        if (regionInfo.getTable().equals(tableName)) {<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>          tableRegions.add(region);<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>        }<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>      }<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    }<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>    return tableRegions;<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span>  }<a name="line.2902"></a>
+<span class="sourceLineNo">2903</span><a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>  @Override<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>    List&lt;HRegion&gt; allRegions;<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>    synchronized (this.onlineRegions) {<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>      // Return a clone copy of the onlineRegions<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    }<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>    return allRegions;<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>  }<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span><a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>  /**<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>   * Gets the online tables in this RS. This method looks at the in-memory onlineRegions.<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>   * @return all the online tables in this RS<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>   */<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    synchronized (this.onlineRegions) {<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>      for (Region region : this.onlineRegions.values()) {<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>      }<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>    }<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>    return tables;<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>  }<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span><a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>  public String[] getRegionServerCoprocessors() {<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    try {<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    } catch (IOException exception) {<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; "<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>        + "skipping.");<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>    }<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>    for (HRegion region : regions) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>      try {<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>      } catch (IOException exception) {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>          + "; skipping.");<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>      }<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>    }<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    return coprocessors.toArray(new String[0]);<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>  }<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span><a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>  /**<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>   * @param region Region to close<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>   */<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>    try {<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>        LOG<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>          .warn("Failed to close " + region.getRegionNameAsString() + " - ignoring and continuing");<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span>      }<a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>    } catch (IOException e) {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() + " - ignoring and continuing",<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>        e);<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    }<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>  }<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span><a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>  /**<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>   * when stopping. If called from the master, the region will update the status.<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>   * &lt;p&gt;<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   * &lt;/p&gt;<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>   * &lt;p&gt;<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>   * If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>   * &lt;/p&gt;<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>   * &lt;p&gt;<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>   * Provides additional flag to indicate if this region blocks should be evicted from the cache.<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>   * &lt;/p&gt;<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>   * @param encodedName Region to close<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>   * @param abort       True if we are aborting<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>   * @return True if closed a region.<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>   * @throws NotServingRegionException if the region is not online<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>   */<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>    final ServerName destination) throws NotServingRegionException {<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>    // Check for permissions to close.<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>    // Can be null if we're calling close on a region that's not online<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>      try {<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>      } catch (IOException exp) {<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>        return false;<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>      }<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    }<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span><a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>    // previous can come back 'null' if not in map.<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    final Boolean previous =<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>      this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName), Boolean.FALSE);<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span><a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already "<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>        + "trying to OPEN. Cancelling OPENING.");<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>        // We're going to try to do a standard close then.<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it."<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>          + " Doing a standard close now");<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>        return closeRegion(encodedName, abort, destination);<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>      }<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>      // Let's get the region from the online region list again<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>      actualRegion = this.getRegion(encodedName);<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>        // The master deletes the znode when it receives this exception.<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>        throw new NotServingRegionException(<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>          "The region " + encodedName + " was opening but not yet served. Opening is cancelled.");<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>      }<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>    } else if (previous == null) {<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>      LOG.info("Received CLOSE for the region: " + encodedName<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>        + ", which we are already trying to CLOSE, but not completed yet");<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>      return true;<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>    }<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span><a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>    if (actualRegion == null) {<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>      // The master deletes the znode when it receives this exception.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>      throw new NotServingRegionException(<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>        "The region " + encodedName + " is not online, and is not opening.");<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>    }<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span><a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>    CloseRegionHandler crh;<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>    if (hri.isMetaRegion()) {<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    } else {<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    }<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>    this.executorService.submit(crh);<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>    return true;<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>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if named region is not<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>   *         member of the online regions.<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>   */<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  }<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span><a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>  @Override<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  }<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span><a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>  @Override<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>    if (destination != null) {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>        if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>          closeSeqNum = 0;<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>        }<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>      }<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>      if (selfMove) {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>          r.getRegionInfo().getEncodedName(),<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>          new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span>      }<a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    }<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>    configurationManager.deregisterObserver(r);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>    return toReturn != null;<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>  }<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span><a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>  /**<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>   */<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>  protected HRegion getRegion(final byte[] regionName) throws NotServingRegionException {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>  }<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span><a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>  public HRegion getRegionByEncodedName(String encodedRegionName) throws NotServingRegionException {<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span><a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>    throws NotServingRegionException {<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    if (region == null) {<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>      if (moveInfo != null) {<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>      }<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>      String regionNameStr =<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>        regionName == null ? encodedRegionName : Bytes.toStringBinary(regionName);<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>        throw new RegionOpeningException(<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>          "Region " + regionNameStr + " is opening on " + this.serverName);<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span>      }<a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>      throw new NotServingRegionException(<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>        "" + regionNameStr + " is not online on " + this.serverName);<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    }<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>    return region;<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>  }<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span><a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>  /**<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to IOE if it isn't<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>   * already.<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>   * @param t   Throwable<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>   * @param msg Message to log in error. Can be null.<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>   */<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>    if (t instanceof NotServingRegionException) {<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>      return t;<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>    }<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>    if (msg == null) {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>      LOG.error("", e);<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>    } else {<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>      LOG.error(msg, e);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>    }<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      checkFileSystem();<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>    }<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    return t;<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span><a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  /**<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>   */<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    return (t instanceof IOException ? (IOException) t<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>      : msg == null || msg.length() == 0 ? new IOException(t)<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>      : new IOException(msg, t));<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>  }<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span><a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>  /**<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>   * Checks to see if the file system is still accessible. If not, sets abortRequested and<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>   * stopRequested<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>   * @return false if file system is not available<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>   */<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>  boolean checkFileSystem() {<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>      try {<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>      } catch (IOException e) {<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>        abort("File System not available", e);<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>        this.dataFsOk = false;<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      }<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>    }<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    return this.dataFsOk;<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>  }<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span><a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>  @Override<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>    List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    Address[] addr = new Address[favoredNodes.size()];<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    // it is a map of region name to Address[]<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>      addr[i] = Address.fromParts(favoredNodes.get(i).getHostName(), favoredNodes.get(i).getPort());<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>    }<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>  }<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span><a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>  /**<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>   * Return the favored nodes for a region given its encoded name. Look at the comment around<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>   * {@link #regionFavoredNodesMap} on why we convert to InetSocketAddress[] here.<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>   * @param encodedRegionName the encoded region name.<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>   * @return array of favored locations<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>   */<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>  @Override<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>    return Address.toSocketAddress(regionFavoredNodesMap.get(encodedRegionName));<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>  }<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span><a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>  @Override<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>  public ServerNonceManager getNonceManager() {<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>    return this.nonceManager;<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  }<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span><a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>  private static class MovedRegionInfo {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>    private final ServerName serverName;<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>    private final long seqNum;<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span><a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>      this.serverName = serverName;<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>      this.seqNum = closeSeqNum;<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span>    }<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span><a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    public ServerName getServerName() {<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>      return serverName;<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>    }<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span><a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>    public long getSeqNum() {<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>      return seqNum;<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>    }<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>  }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span><a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>  /**<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double the<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>   * number of network calls instead of reducing them.<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>   */<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span><a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum,<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>    boolean selfMove) {<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>    if (selfMove) {<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>      return;<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>    }<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid="<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>      + closeSeqNum);<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>  }<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span><a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>  }<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span><a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>  @InterfaceAudience.Private<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>  }<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span><a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>  @InterfaceAudience.Private<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>  public int movedRegionCacheExpiredTime() {<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>    return TIMEOUT_REGION_MOVED;<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>  }<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span><a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>  private String getMyEphemeralNodePath() {<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>    return zooKeeper.getZNodePaths().getRsPath(serverName);<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>  }<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span><a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>  private boolean isHealthCheckerConfigured() {<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>  }<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span><a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>  /** Returns the underlying {@link CompactSplit} for the servers */<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>  public CompactSplit getCompactSplitThread() {<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>    return this.compactSplitThread;<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>  }<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span><a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>    @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>    final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>    try {<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>      String serviceName = call.getServiceName();<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>      if (service == null) {<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>        throw new UnknownProtocolException(null,<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>          "No registered coprocessor executorService found for " + serviceName);<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>      }<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>      ServiceDescriptor serviceDesc = service.getDescriptorForType();<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span><a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>      String methodName = call.getMethodName();<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>      MethodDescriptor methodDesc = serviceDesc.findMethodByName(methodName);<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>      if (methodDesc == null) {<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>        throw new UnknownProtocolException(service.getClass(),<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span>          "Unknown method " + methodName + " called on executorService " + serviceName);<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>      }<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span><a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>      Message request = CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>      final Message.Builder responseBuilder =<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>        service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>        if (message != null) {<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>          responseBuilder.mergeFrom(message);<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        }<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>      });<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>      if (exception != null) {<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>        throw exception;<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      }<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>    } catch (IOException ie) {<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>      throw new ServiceException(ie);<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><a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>  /**<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>   * May be null if this is a master which not carry table.<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>   * @return The block cache instance used by the regionserver.<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>   */<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>  @Override<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>    return Optional.ofNullable(this.blockCache);<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>  }<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span><a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>  /**<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>   * May be null if this is a master which not carry table.<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>   * @return The cache for mob files used by the regionserver.<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>   */<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>  @Override<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>  }<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span><a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>    long evictedBlocks = 0;<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span><a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>    for (Store store : region.getStores()) {<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>      for (StoreFile hFile : store.getStorefiles()) {<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>      }<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    }<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span><a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>    return CacheEvictionStats.builder().withEvictedBlocks(evictedBlocks).build();<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>  }<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span><a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>  @Override<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>  public double getCompactionPressure() {<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>    double max = 0;<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>    for (Region region : onlineRegions.values()) {<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>      for (Store store : region.getStores()) {<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>        double normCount = store.getCompactionPressure();<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>        if (normCount &gt; max) {<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>          max = normCount;<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>        }<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>      }<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>    }<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>    return max;<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>  }<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span><a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>  @Override<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>    return hMemManager;<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>  }<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span><a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>  public MemStoreFlusher getMemStoreFlusher() {<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>    return cacheFlusher;<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>  /**<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>   * For testing<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>   */<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>  @InterfaceAudience.Private<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>  public boolean walRollRequestFinished() {<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>    return this.walRoller.walRollFinished();<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>  }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span><a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>  @Override<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>  public ThroughputController getFlushThroughputController() {<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    return flushThroughputController;<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>  }<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span><a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>  @Override<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>  public double getFlushPressure() {<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>      // return 0 during RS initialization<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>      return 0.0;<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>    }<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>  }<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span><a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>  @Override<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>    ThroughputController old = this.flushThroughputController;<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>    if (old != null) {<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      old.stop("configuration change");<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    }<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>    try {<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>      Superusers.initialize(newConf);<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    } catch (IOException e) {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    }<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span><a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>    // update region server coprocessor if the configuration has changed.<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>    if (<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>      CoprocessorConfigurationUtil.checkConfigurationChange(getConfiguration(), newConf,<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>        CoprocessorHost.REGIONSERVER_COPROCESSOR_CONF_KEY)<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>    ) {<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>      LOG.info("Update region server coprocessors because the configuration has changed");<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      this.rsHost = new RegionServerCoprocessorHost(this, newConf);<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>    }<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>  }<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span><a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>  @Override<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>  public MetricsRegionServer getMetrics() {<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    return metricsRegionServer;<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>  }<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span><a name="line.3410"></a>
+<span class="sourceLineNo">3411</span>  @Override<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>    return this.secureBulkLoadManager;<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>  }<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span><a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>  @Override<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>    final Abortable abort) {<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>    final LockServiceClient client =<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>      new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>  }<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span><a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>  @Override<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>  }<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span><a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>  @Override<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>    return this.rsSpaceQuotaManager;<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>  }<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span><a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>  @Override<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>    Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>      return false;<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>    }<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>      // the current server could be stopping.<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>      return false;<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>    }<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>    try {<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>        rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>      rss.reportFileArchival(null, request);<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>    } catch (ServiceException se) {<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>        if (LOG.isTraceEnabled()) {<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>            + " This will be retried.", ioe);<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        }<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>        return false;<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>      }<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>      if (rssStub == rss) {<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>        rssStub = null;<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>      }<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>      // re-create the stub if we failed to report the archival<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>      createRegionServerStatusStub(true);<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>      return false;<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>    }<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>    return true;<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>  }<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span><a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>  }<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span><a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>    procedureResultReporter.complete(procId, error);<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>  }<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span><a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>    for (;;) {<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>      rss = rssStub;<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>      if (rss != null) {<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>        break;<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>      }<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>      createRegionServerStatusStub();<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    }<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>    try {<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>      rss.reportProcedureDone(null, request);<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>    } catch (ServiceException se) {<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>      if (rssStub == rss) {<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>        rssStub = null;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>      }<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    }<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>  }<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span><a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>  /**<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>   * Will ignore the open/close region procedures which already submitted or executed. When master<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>   * had unfinished open/close region procedure and restarted, new active master may send duplicate<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>   * open/close region request to regionserver. The open/close request is submitted to a thread pool<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>   * and execute. So first need a cache for submitted open/close region procedures. After the<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>   * open/close region request executed and report region transition succeed, cache it in executed<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>   * region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds. See<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>   * HBASE-22404 for more details.<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>   * @param procId the id of the open/close region procedure<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>   * @return true if the procedure can be submitted.<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>   */<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>  boolean submitRegionProcedure(long procId) {<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>    if (procId == -1) {<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>      return true;<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>    }<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>    // Ignore the region procedures which already submitted.<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>    if (previous != null) {<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>      return false;<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    }<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>    // Ignore the region procedures which already executed.<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>      return false;<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>    }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>    return true;<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>  }<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span><a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>  /**<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>   * @param procId the id of the open/close region procedure<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>   */<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>  public void finishRegionProcedure(long procId) {<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    executedRegionProcedures.put(procId, procId);<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>    submittedRegionProcedures.remove(procId);<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>  }<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span><a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>  /**<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>   * Force to terminate region server when abort timeout.<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>   */<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span><a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>    public SystemExitWhenAbortTimeout() {<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>    }<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span><a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>    @Override<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>    public void run() {<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>      LOG.warn("Aborting region server timed out, terminating forcibly"<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>        + " and does not wait for any running shutdown hooks or finalizers to finish their work."<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>        + " Thread dump to stdout.");<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>      Runtime.getRuntime().halt(1);<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    }<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>  }<a name="line.3556"></a>
+<span class="sourceLineNo">3557</span><a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>  @InterfaceAudience.Private<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>    return compactedFileDischarger;<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>  }<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span><a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>  /**<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>   * Return pause time configured in {@link HConstants#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME}}<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>   * @return pause time<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>   */<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>  @InterfaceAudience.Private<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>  public long getRetryPauseTime() {<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>    return this.retryPauseTime;<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>  }<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span><a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>  @Override<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>  public Optional&lt;ServerName&gt; getActiveMaster() {<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>    return Optional.ofNullable(masterAddressTracker.getMasterAddress());<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>  }<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span><a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>  @Override<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>  public List&lt;ServerName&gt; getBackupMasters() {<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>    return masterAddressTracker.getBackupMasters();<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>  }<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span><a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>  @Override<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>  public Iterator&lt;ServerName&gt; getBootstrapNodes() {<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>    return bootstrapNodeManager.getBootstrapNodes().iterator();<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>  }<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span><a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>  @Override<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>  public List&lt;HRegionLocation&gt; getMetaLocations() {<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>    return metaRegionLocationCache.getMetaRegionLocations();<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>  }<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span><a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>  @Override<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>  protected NamedQueueRecorder createNamedQueueRecord() {<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>    return NamedQueueRecorder.getInstance(conf);<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>  }<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span><a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>  @Override<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  protected boolean clusterMode() {<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span>    // this method will be called in the constructor of super class, so we can not return masterless<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>    // directly here, as it will always be false.<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>    return !conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>  }<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span><a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>  @InterfaceAudience.Private<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span>  public BrokenStoreFileCleaner getBrokenStoreFileCleaner() {<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span>    return brokenStoreFileCleaner;<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>  }<a name="line.3607"></a>
+<span class="sourceLineNo">3608</span><a name="line.3608"></a>
+<span class="sourceLineNo">3609</span>  @InterfaceAudience.Private<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span>  public RSMobFileCleanerChore getRSMobFileCleanerChore() {<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>    return rsMobFileCleanerChore;<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>  }<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span><a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>  RSSnapshotVerifier getRsSnapshotVerifier() {<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>    return rsSnapshotVerifier;<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>  }<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span><a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>  @Override<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span>  protected void stopChores() {<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>    shutdownChore(nonceManagerChore);<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>    shutdownChore(compactionChecker);<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    shutdownChore(compactedFileDischarger);<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>    shutdownChore(periodicFlusher);<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span>    shutdownChore(healthCheckChore);<a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>    shutdownChore(executorStatusChore);<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>    shutdownChore(storefileRefresher);<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>    shutdownChore(fsUtilizationChore);<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>    shutdownChore(namedQueueServiceChore);<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>    shutdownChore(brokenStoreFileCleaner);<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>    shutdownChore(rsMobFileCleanerChore);<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>    shutdownChore(replicationMarkerChore);<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>  }<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span><a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  @Override<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>  public RegionReplicationBufferManager getRegionReplicationBufferManager() {<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>    return regionReplicationBufferManager;<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>  }<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>}<a name="line.3638"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index 539bae52cdf..9ffb56679f0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
@@ -215,3436 +215,3435 @@
 <span class="sourceLineNo">207</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds;<a name="line.207"></a>
 <span class="sourceLineNo">208</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad;<a name="line.208"></a>
 <span class="sourceLineNo">209</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.Coprocessor;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.Coprocessor.Builder;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.NameStringPair;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionServerInfo;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier;<a name="line.213"></a>
-<span class="sourceLineNo">214</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.RegionSpecifierType;<a name="line.214"></a>
-<span class="sourceLineNo">215</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService;<a name="line.215"></a>
-<span class="sourceLineNo">216</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos;<a name="line.216"></a>
-<span class="sourceLineNo">217</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdResponse;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService;<a name="line.222"></a>
-<span class="sourceLineNo">223</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.226"></a>
-<span class="sourceLineNo">227</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionResponse;<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>/**<a name="line.232"></a>
-<span class="sourceLineNo">233</span> * HRegionServer makes a set of HRegions available to clients. It checks in with the HMaster. There<a name="line.233"></a>
-<span class="sourceLineNo">234</span> * are many HRegionServers in a single HBase deployment.<a name="line.234"></a>
-<span class="sourceLineNo">235</span> */<a name="line.235"></a>
-<span class="sourceLineNo">236</span>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.TOOLS)<a name="line.236"></a>
-<span class="sourceLineNo">237</span>@SuppressWarnings({ "deprecation" })<a name="line.237"></a>
-<span class="sourceLineNo">238</span>public class HRegionServer extends HBaseServerBase&lt;RSRpcServices&gt;<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  implements RegionServerServices, LastSequenceId {<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>  private static final Logger LOG = LoggerFactory.getLogger(HRegionServer.class);<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * For testing only! Set to true to skip notifying region assignment to master .<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   */<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  @InterfaceAudience.Private<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "MS_SHOULD_BE_FINAL")<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public static boolean TEST_SKIP_REPORTING_TRANSITION = false;<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * A map from RegionName to current action in progress. Boolean value indicates: true - if open<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * region action in progress false - if close region action in progress<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  private final ConcurrentMap&lt;byte[], Boolean&gt; regionsInTransitionInRS =<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    new ConcurrentSkipListMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<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>   * Used to cache the open/close region procedures which already submitted. See<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * {@link #submitRegionProcedure(long)}.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private final ConcurrentMap&lt;Long, Long&gt; submittedRegionProcedures = new ConcurrentHashMap&lt;&gt;();<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * Used to cache the open/close region procedures which already executed. See<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   * {@link #submitRegionProcedure(long)}.<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private final Cache&lt;Long, Long&gt; executedRegionProcedures =<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    CacheBuilder.newBuilder().expireAfterAccess(600, TimeUnit.SECONDS).build();<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * Used to cache the moved-out regions<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   */<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  private final Cache&lt;String, MovedRegionInfo&gt; movedRegionInfoCache = CacheBuilder.newBuilder()<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    .expireAfterWrite(movedRegionCacheExpiredTime(), TimeUnit.MILLISECONDS).build();<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private MemStoreFlusher cacheFlusher;<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>  private HeapMemoryManager hMemManager;<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span>  // Replication services. If no replication, this handler will be null.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  private boolean sameReplicationSourceAndSink;<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  // Compactions<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the encoded region name.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * All access should be synchronized.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Lock for gating access to {@link #onlineRegions}. TODO: If this map is gated by a lock, does it<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * need to be a ConcurrentHashMap?<a name="line.294"></a>
-<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.296"></a>
-<span class="sourceLineNo">297</span><a name="line.297"></a>
-<span class="sourceLineNo">298</span>  /**<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   * Map of encoded region names to the DataNode locations they should be hosted on We store the<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * value as Address since InetSocketAddress is required by the HDFS API (create() that takes<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * favored nodes as hints for placing file blocks). We could have used ServerName here as the<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * value class, but we'd need to convert it to InetSocketAddress at some point before the HDFS API<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   * call, and it seems a bit weird to store ServerName since ServerName refers to RegionServers and<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * here we really mean DataNode locations. We don't store it as InetSocketAddress here because the<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   * conversion on demand from Address to InetSocketAddress will guarantee the resolution results<a name="line.305"></a>
-<span class="sourceLineNo">306</span>   * will be fresh when we need it.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   */<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  private final Map&lt;String, Address[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span>  private LeaseManager leaseManager;<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private volatile boolean dataFsOk;<a name="line.312"></a>
-<span class="sourceLineNo">313</span><a name="line.313"></a>
-<span class="sourceLineNo">314</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  // Default abort timeout is 1200 seconds for safe<a name="line.315"></a>
-<span class="sourceLineNo">316</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  // Will run this task when abort timeout<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>  // A state before we go into stopped state. At this stage we're closing user<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  // space regions.<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  private boolean stopping = false;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private volatile boolean killed = false;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  private final int threadWakeFrequency;<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private final int compactionCheckFrequency;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private final int flushCheckFrequency;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Stub to do region server status calls against the master.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private RpcClient rpcClient;<a name="line.336"></a>
-<span class="sourceLineNo">337</span><a name="line.337"></a>
-<span class="sourceLineNo">338</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private JvmPauseMonitor pauseMonitor;<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private RSSnapshotVerifier rsSnapshotVerifier;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  /** region server process name */<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public static final String REGIONSERVER = "regionserver";<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  private MetricsRegionServer metricsRegionServer;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * Check for compactions requests.<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  private ScheduledChore compactionChecker;<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
-<span class="sourceLineNo">356</span>   * Check for flushes<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   */<a name="line.357"></a>
-<span class="sourceLineNo">358</span>  private ScheduledChore periodicFlusher;<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>  private volatile WALFactory walFactory;<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private LogRoller walRoller;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  // A thread which calls reportProcedureDone<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  // flag set after we're done setting up server threads<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  // master address tracker<a name="line.370"></a>
-<span class="sourceLineNo">371</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>  // Log Splitting Worker<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private SplitLogWorker splitLogWorker;<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private final int shortOperationTimeout;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  // Time to pause if master says 'please hold'<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private final long retryPauseTime;<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  private NamedQueueServiceChore namedQueueServiceChore = null;<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span>  // Block cache<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  private BlockCache blockCache;<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  // The cache for mob files<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private MobFileCache mobFileCache;<a name="line.388"></a>
-<span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  /** The health check chore. */<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  private HealthCheckChore healthCheckChore;<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  /** The Executor status collect chore. */<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  private ExecutorStatusChore executorStatusChore;<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span>  /** The nonce manager chore. */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private ScheduledChore nonceManagerChore;<a name="line.397"></a>
-<span class="sourceLineNo">398</span><a name="line.398"></a>
-<span class="sourceLineNo">399</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * @deprecated since 2.4.0 and will be removed in 4.0.0. Use<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   *             {@link HRegionServer#UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY} instead.<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-24667"&gt;HBASE-24667&lt;/a&gt;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  @Deprecated<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    "hbase.regionserver.hostname.disable.master.reversedns";<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>  /**<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * HBASE-18226: This config and hbase.unsafe.regionserver.hostname are mutually exclusive.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Exception will be thrown if both are used.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
-<span class="sourceLineNo">415</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  final static String UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    "hbase.unsafe.regionserver.hostname.disable.master.reversedns";<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Unique identifier for the cluster we are a part of.<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  private String clusterId;<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span>  // chore for refreshing store files for secondary regions<a name="line.424"></a>
-<span class="sourceLineNo">425</span>  private StorefileRefresherChore storefileRefresher;<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span>  private volatile RegionServerCoprocessorHost rsHost;<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  /**<a name="line.434"></a>
-<span class="sourceLineNo">435</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent in the<a name="line.435"></a>
-<span class="sourceLineNo">436</span>   * case where client doesn't receive the response from a successful operation and retries. We<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * track the successful ops for some time via a nonce sent by client and handle duplicate<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * operations (currently, by failing them; in future we might use MVCC to return result). Nonces<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * are also recovered from WAL during, recovery; however, the caveats (from HBASE-3787) are: - WAL<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * recovery is optimized, and under high load we won't read nearly nonce-timeout worth of past<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * records. If we don't read the records, we don't read and recover the nonces. Some WALs within<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * nonce-timeout at recovery may not even be present due to rolling/cleanup. - There's no WAL<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * recovery during normal region move, so nonces will not be transfered. We can have separate<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * additional "Nonce WAL". It will just contain bunch of numbers and won't be flushed on main path<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * - because WAL itself also contains nonces, if we only flush it before memstore flush, for a<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * given nonce we will either see it in the WAL (if it was never flushed to disk, it will be part<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   * of recovery), or we'll see it as part of the nonce log (or both occasionally, which doesn't<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * matter). Nonce log file can be deleted after the latest nonce in it expired. It can also be<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * recovered during move.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  final ServerNonceManager nonceManager;<a name="line.451"></a>
-<span class="sourceLineNo">452</span><a name="line.452"></a>
-<span class="sourceLineNo">453</span>  private BrokenStoreFileCleaner brokenStoreFileCleaner;<a name="line.453"></a>
-<span class="sourceLineNo">454</span><a name="line.454"></a>
-<span class="sourceLineNo">455</span>  private RSMobFileCleanerChore rsMobFileCleanerChore;<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>  @InterfaceAudience.Private<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.458"></a>
-<span class="sourceLineNo">459</span><a name="line.459"></a>
-<span class="sourceLineNo">460</span>  private volatile ThroughputController flushThroughputController;<a name="line.460"></a>
-<span class="sourceLineNo">461</span><a name="line.461"></a>
-<span class="sourceLineNo">462</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.462"></a>
-<span class="sourceLineNo">463</span><a name="line.463"></a>
-<span class="sourceLineNo">464</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  private BootstrapNodeManager bootstrapNodeManager;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * True if this RegionServer is coming up in a cluster where there is no Master; means it needs to<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * just come up and make do without a Master to talk to: e.g. in test or HRegionServer is doing<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * other than its usual duties: e.g. as an hollowed-out host whose only purpose is as a<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * Replication-stream sink; see HBASE-18846 for more. TODO: can this replace<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  private final boolean masterless;<a name="line.475"></a>
-<span class="sourceLineNo">476</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>  /** regionserver codec list **/<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.479"></a>
-<span class="sourceLineNo">480</span><a name="line.480"></a>
-<span class="sourceLineNo">481</span>  // A timer to shutdown the process if abort takes too long<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  private Timer abortMonitor;<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>  private RegionReplicationBufferManager regionReplicationBufferManager;<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  /*<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * Chore that creates replication marker rows.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   */<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private ReplicationMarkerChore replicationMarkerChore;<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * Starts a HRegionServer at the default location.<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * &lt;p/&gt;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * Don't start any services or managers in here in the Constructor. Defer till after we register<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * with the Master as much as possible. See {@link #startServices}.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   */<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    super(conf, "RegionServer"); // thread name<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    final Span span = TraceUtil.createSpan("HRegionServer.cxtor");<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.dataFsOk = true;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      this.masterless = !clusterMode();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      HFile.checkHFileVersion(this.conf);<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      checkCodecs(this.conf);<a name="line.505"></a>
-<span class="sourceLineNo">506</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span>      // Disable usage of meta replicas in the regionserver<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      // Config'ed params<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.518"></a>
-<span class="sourceLineNo">519</span>        HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>      this.retryPauseTime = conf.getLong(HConstants.HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME,<a name="line.521"></a>
-<span class="sourceLineNo">522</span>        HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME);<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span>      blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>      mobFileCache = new MobFileCache(conf);<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>      rsSnapshotVerifier = new RSSnapshotVerifier(conf);<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>      uncaughtExceptionHandler =<a name="line.531"></a>
-<span class="sourceLineNo">532</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.534"></a>
-<span class="sourceLineNo">535</span>      if (!this.masterless) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        masterAddressTracker.start();<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      } else {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        masterAddressTracker = null;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      }<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      this.rpcServices.start(zooKeeper);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>      span.setStatus(StatusCode.OK);<a name="line.542"></a>
-<span class="sourceLineNo">543</span>    } catch (Throwable t) {<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      // cause of failed startup is lost.<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      TraceUtil.setError(span, t);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      LOG.error("Failed construction RegionServer", t);<a name="line.547"></a>
-<span class="sourceLineNo">548</span>      throw t;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      span.end();<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  // HMaster should override this method to load the specific config for master<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    String hostname = conf.get(UNSAFE_RS_HOSTNAME_KEY);<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    if (conf.getBoolean(UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>        String msg = UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and "<a name="line.560"></a>
-<span class="sourceLineNo">561</span>          + UNSAFE_RS_HOSTNAME_KEY + " are mutually exclusive. Do not set "<a name="line.561"></a>
-<span class="sourceLineNo">562</span>          + UNSAFE_RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " to true while "<a name="line.562"></a>
-<span class="sourceLineNo">563</span>          + UNSAFE_RS_HOSTNAME_KEY + " is used";<a name="line.563"></a>
-<span class="sourceLineNo">564</span>        throw new IOException(msg);<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      } else {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>        return rpcServices.getSocketAddress().getHostName();<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    } else {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>      return hostname;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @Override<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  protected String getProcessName() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return REGIONSERVER;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  @Override<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  protected boolean canCreateBaseZNode() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    return !clusterMode();<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  @Override<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  protected boolean canUpdateTableDescriptor() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    return false;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>  @Override<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  protected boolean cacheTableDescriptor() {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    return false;<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    return new RSRpcServices(this);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
-<span class="sourceLineNo">602</span><a name="line.602"></a>
-<span class="sourceLineNo">603</span>  @Override<a name="line.603"></a>
-<span class="sourceLineNo">604</span>  protected void configureInfoServer(InfoServer infoServer) {<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    infoServer.setAttribute(REGIONSERVER, this);<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  }<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>  @Override<a name="line.609"></a>
-<span class="sourceLineNo">610</span>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return RSDumpServlet.class;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>  }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span>  /**<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * Used by {@link RSDumpServlet} to generate debugging information.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   */<a name="line.616"></a>
-<span class="sourceLineNo">617</span>  public void dumpRowLocks(final PrintWriter out) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>    StringBuilder sb = new StringBuilder();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    for (HRegion region : getRegions()) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      if (region.getLockedRows().size() &gt; 0) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        for (HRegion.RowLockContext rowLockContext : region.getLockedRows().values()) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          sb.setLength(0);<a name="line.622"></a>
-<span class="sourceLineNo">623</span>          sb.append(region.getTableDescriptor().getTableName()).append(",")<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            .append(region.getRegionInfo().getEncodedName()).append(",");<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          sb.append(rowLockContext.toString());<a name="line.625"></a>
-<span class="sourceLineNo">626</span>          out.println(sb);<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        }<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      }<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    }<a name="line.629"></a>
-<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
-<span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>  @Override<a name="line.632"></a>
-<span class="sourceLineNo">633</span>  public boolean registerService(Service instance) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    // No stacking of instances is allowed for a single executorService name<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      LOG.error("Coprocessor executorService " + serviceName<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        + " already registered, rejecting request from " + instance);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      return false;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>    }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    if (LOG.isDebugEnabled()) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      LOG.debug(<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    return true;<a name="line.648"></a>
-<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
-<span class="sourceLineNo">650</span><a name="line.650"></a>
-<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
-<span class="sourceLineNo">652</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.652"></a>
-<span class="sourceLineNo">653</span>   */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>    // check to see if the codec list is available:<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    String[] codecs = c.getStrings(REGIONSERVER_CODEC, (String[]) null);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    if (codecs == null) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      return;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    }<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    for (String codec : codecs) {<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.661"></a>
-<span class="sourceLineNo">662</span>        throw new IOException(<a name="line.662"></a>
-<span class="sourceLineNo">663</span>          "Compression codec " + codec + " not supported, aborting RS construction");<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>  public String getClusterId() {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    return this.clusterId;<a name="line.669"></a>
-<span class="sourceLineNo">670</span>  }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>  /**<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  private void preRegistrationInitialization() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    final Span span = TraceUtil.createSpan("HRegionServer.preRegistrationInitialization");<a name="line.678"></a>
-<span class="sourceLineNo">679</span>    try (Scope ignored = span.makeCurrent()) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      initializeZooKeeper();<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      setupClusterConnection();<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      bootstrapNodeManager = new BootstrapNodeManager(asyncClusterConnection, masterAddressTracker);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      regionReplicationBufferManager = new RegionReplicationBufferManager(this);<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      // Setup RPC client for master communication<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.685"></a>
-<span class="sourceLineNo">686</span>      span.setStatus(StatusCode.OK);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>    } catch (Throwable t) {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      // Call stop if error or process will stick around for ever since server<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      // puts up non-daemon threads.<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      TraceUtil.setError(span, t);<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      this.rpcServices.stop();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    } finally {<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      span.end();<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    }<a name="line.695"></a>
-<span class="sourceLineNo">696</span>  }<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>  /**<a name="line.698"></a>
-<span class="sourceLineNo">699</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.699"></a>
-<span class="sourceLineNo">700</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.700"></a>
-<span class="sourceLineNo">701</span>   * &lt;p&gt;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>   * Finally open long-living server short-circuit connection.<a name="line.702"></a>
-<span class="sourceLineNo">703</span>   */<a name="line.703"></a>
-<span class="sourceLineNo">704</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value = "RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      justification = "cluster Id znode read would give us correct response")<a name="line.705"></a>
-<span class="sourceLineNo">706</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    // Nothing to do in here if no Master in the mix.<a name="line.707"></a>
-<span class="sourceLineNo">708</span>    if (this.masterless) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      return;<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    }<a name="line.710"></a>
-<span class="sourceLineNo">711</span><a name="line.711"></a>
-<span class="sourceLineNo">712</span>    // Create the master address tracker, register with zk, and start it. Then<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    // block until a master is available. No point in starting up if no master<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    // running.<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.715"></a>
-<span class="sourceLineNo">716</span><a name="line.716"></a>
-<span class="sourceLineNo">717</span>    // Wait on cluster being up. Master will set this flag up in zookeeper<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    // when ready.<a name="line.718"></a>
-<span class="sourceLineNo">719</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    if (clusterId == null) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      // Retrieve clusterId<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      // Since cluster status is now up<a name="line.724"></a>
-<span class="sourceLineNo">725</span>      // ID should have already been set by HMaster<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      try {<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        if (clusterId == null) {<a name="line.728"></a>
-<span class="sourceLineNo">729</span>          this.abort("Cluster ID has not been set");<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        }<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        LOG.info("ClusterId : " + clusterId);<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      } catch (KeeperException e) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      }<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    }<a name="line.735"></a>
-<span class="sourceLineNo">736</span><a name="line.736"></a>
-<span class="sourceLineNo">737</span>    if (isStopped() || isAborted()) {<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      return; // No need for further initialization<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    }<a name="line.739"></a>
-<span class="sourceLineNo">740</span><a name="line.740"></a>
-<span class="sourceLineNo">741</span>    // watch for snapshots and other procedures<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    try {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.743"></a>
-<span class="sourceLineNo">744</span>      rspmHost.loadProcedures(conf);<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      rspmHost.initialize(this);<a name="line.745"></a>
-<span class="sourceLineNo">746</span>    } catch (KeeperException e) {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    }<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Utilty method to wait indefinitely on a znode availability while checking if the region server<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * is shut down<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   * @param tracker znode tracker to use<a name="line.754"></a>
-<span class="sourceLineNo">755</span>   * @throws IOException          any IO exception, plus if the RS is stopped<a name="line.755"></a>
-<span class="sourceLineNo">756</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.756"></a>
-<span class="sourceLineNo">757</span>   */<a name="line.757"></a>
-<span class="sourceLineNo">758</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    throws IOException, InterruptedException {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      if (this.stopped) {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>  }<a name="line.765"></a>
-<span class="sourceLineNo">766</span><a name="line.766"></a>
-<span class="sourceLineNo">767</span>  /** Returns True if the cluster is up. */<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  @Override<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  public boolean isClusterUp() {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    return this.masterless<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      || (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.771"></a>
-<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
-<span class="sourceLineNo">773</span><a name="line.773"></a>
-<span class="sourceLineNo">774</span>  private void initializeReplicationMarkerChore() {<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    boolean replicationMarkerEnabled =<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      conf.getBoolean(REPLICATION_MARKER_ENABLED_KEY, REPLICATION_MARKER_ENABLED_DEFAULT);<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // If replication or replication marker is not enabled then return immediately.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    if (replicationMarkerEnabled) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      int period = conf.getInt(REPLICATION_MARKER_CHORE_DURATION_KEY,<a name="line.779"></a>
-<span class="sourceLineNo">780</span>        REPLICATION_MARKER_CHORE_DURATION_DEFAULT);<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      replicationMarkerChore = new ReplicationMarkerChore(this, this, period, conf);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>    }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>  }<a name="line.783"></a>
... 27171 lines suppressed ...