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

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

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 eea405f  Published site at 00981643d2fd1b393bd23d9eb43227a4e42d1000.
eea405f is described below

commit eea405f6501f4fb8cf007fad525aa6847c7d43e5
Author: jenkins <bu...@apache.org>
AuthorDate: Sat Aug 28 20:19:24 2021 +0000

    Published site at 00981643d2fd1b393bd23d9eb43227a4e42d1000.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 apidocs/org/apache/hadoop/hbase/client/Admin.html  |    7 +
 .../org/apache/hadoop/hbase/client/Connection.html |    2 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |   62 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/index-all.html                          |    7 +-
 devapidocs/org/apache/hadoop/hbase/Abortable.html  |   34 +-
 ...iHBaseCluster.MiniHBaseClusterRegionServer.html |    9 +-
 devapidocs/org/apache/hadoop/hbase/Server.html     |    2 +-
 .../hadoop/hbase/backup/BackupHFileCleaner.html    |    7 +
 .../LogRollBackupSubprocedurePool.html             |    7 +
 .../org/apache/hadoop/hbase/client/Admin.html      |    7 +
 .../hadoop/hbase/client/AdminOverAsyncAdmin.html   |    7 +
 .../org/apache/hadoop/hbase/client/Connection.html |    2 +-
 .../client/ConnectionOverAsyncConnection.html      |    7 +
 .../org/apache/hadoop/hbase/client/HBaseHbck.html  |    7 +
 .../org/apache/hadoop/hbase/client/Hbck.html       |    2 +-
 .../hadoop/hbase/client/SharedConnection.html      |    7 +
 .../org/apache/hadoop/hbase/master/HMaster.html    |    4 +-
 .../master/HMasterCommandLine.LocalHMaster.html    |    4 +-
 .../apache/hadoop/hbase/master/MasterServices.html |    2 +-
 .../HRegionServer.MovedRegionInfo.html             |   12 +-
 .../HRegionServer.SystemExitWhenAbortTimeout.html  |    6 +-
 .../hadoop/hbase/regionserver/HRegionServer.html   |  616 +++--
 .../hbase/regionserver/RegionServerServices.html   |    2 +-
 .../replication/HBaseReplicationEndpoint.html      |    7 +
 .../DumpReplicationQueues.WarnOnlyAbortable.html   |    7 +
 .../HBaseInterClusterReplicationEndpoint.html      |    7 +
 .../RegionReplicaReplicationEndpoint.html          |    7 +
 .../ReplicationSyncUp.DummyServer.html             |    7 +
 .../hadoop/hbase/thrift2/client/ThriftAdmin.html   |    7 +
 .../hbase/thrift2/client/ThriftConnection.html     |    7 +
 .../apache/hadoop/hbase/zookeeper/ZKWatcher.html   |    7 +
 .../org/apache/hadoop/hbase/Abortable.html         |   20 +-
 .../HRegionServer.CompactionChecker.html           | 2713 ++++++++++----------
 .../HRegionServer.MovedRegionInfo.html             | 2713 ++++++++++----------
 .../HRegionServer.PeriodicMemStoreFlusher.html     | 2713 ++++++++++----------
 .../HRegionServer.SystemExitWhenAbortTimeout.html  | 2713 ++++++++++----------
 .../hadoop/hbase/regionserver/HRegionServer.html   | 2713 ++++++++++----------
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-tracking.html                                |    2 +-
 mail-lists.html                                    |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 project-summary.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 source-repository.html                             |    2 +-
 sponsors.html                                      |    2 +-
 supportingprojects.html                            |    2 +-
 team-list.html                                     |    2 +-
 .../hadoop/hbase/MockRegionServerServices.html     |    7 +
 ...sHBaseCluster.MiniHBaseClusterRegionServer.html |    9 +-
 ...ClientOperationTimeout.DelayedRegionServer.html |    9 +-
 .../hbase/TestLocalHBaseCluster.MyHMaster.html     |    4 +-
 .../TestLocalHBaseCluster.MyHRegionServer.html     |    9 +-
 ...nnerRPCTimeout.RegionServerWithScanTimeout.html |    9 +-
 ...taReplicaAssigment.BrokenMetaReplicaMaster.html |    4 +-
 ...tMetaCache.RegionServerWithFakeRpcServices.html |    9 +-
 .../TestCoprocessorHost.TestAbortable.html         |    7 +
 .../ipc/TestRpcHandlerException.AbortServer.html   |    7 +
 ...utputFormat2.ConfigurationCaptorConnection.html |    7 +
 ...ltiTableInputFormatBase.MRSplitsConnection.html |    7 +
 ...eInputFormatBase.ConnectionForMergeTesting.html |    7 +
 .../hadoop/hbase/master/AlwaysStandByHMaster.html  |    4 +-
 .../hbase/master/MockNoopMasterServices.html       |    7 +
 .../hadoop/hbase/master/MockRegionServer.html      |    7 +
 .../TestActiveMasterManager.DummyMaster.html       |    7 +
 .../TestCloseAnOpeningRegion.MockHMaster.html      |    4 +-
 .../TestClusterRestartFailover.HMasterForTest.html |    4 +-
 .../master/TestGetReplicationLoad.MyMaster.html    |    4 +-
 .../hbase/master/TestMasterMetrics.MyMaster.html   |    4 +-
 .../master/TestMasterMetrics.MyRegionServer.html   |    9 +-
 .../TestMetaShutdownHandler.MyRegionServer.html    |    9 +-
 ...stRegionsRecoveryConfigManager.TestHMaster.html |    4 +-
 ...stRetainAssignmentOnRestart.HMasterForTest.html |    4 +-
 .../TestShutdownBackupMaster.MockHMaster.html      |    4 +-
 .../TestSplitLogManager.DummyMasterServices.html   |    7 +
 .../master/assignment/MockMasterServices.html      |    7 +
 ...nitializedRegionServer.RegionServerForTest.html |    9 +-
 ...tOpenRegionProcedureBackoff.HMasterForTest.html |    4 +-
 ...TestOpenRegionProcedureHang.HMasterForTest.html |    4 +-
 .../TestRaceBetweenSCPAndDTP.HMasterForTest.html   |    4 +-
 .../TestRaceBetweenSCPAndTRSP.HMasterForTest.html  |    4 +-
 ...gnedToMultipleRegionServers.HMasterForTest.html |    4 +-
 ...TestReportOnlineRegionsRace.HMasterForTest.html |    4 +-
 ...ateTransitionFromDeadServer.HMasterForTest.html |    4 +-
 ...tRegionStateTransitionRetry.HMasterForTest.html |    4 +-
 .../TestSCPGetRegionsRace.HMasterForTest.html      |    4 +-
 ...stWakeUpUnexpectedProcedure.HMasterForTest.html |    4 +-
 .../TestWakeUpUnexpectedProcedure.RSForTest.html   |    9 +-
 .../cleaner/TestHFileCleaner.DummyServer.html      |    7 +
 .../cleaner/TestHFileLinkCleaner.DummyServer.html  |    7 +
 .../cleaner/TestLogsCleaner.DummyServer.html       |    7 +
 .../TestLogsCleaner.FaultyZooKeeperWatcher.html    |    7 +
 .../TestReplicationHFileCleaner.DummyServer.html   |    7 +
 ...icationHFileCleaner.FaultyZooKeeperWatcher.html |    7 +
 ...terPeerWorkerWhenRestarting.HMasterForTest.html |    4 +-
 ...eRSProcedureManager.SimpleSubprocedurePool.html |    7 +
 ...dureStorePerformanceEvaluation.DummyServer.html |    7 +
 .../hbase/regionserver/OOMERegionServer.html       |    9 +-
 ...ctionInDeadRegionServer.IgnoreYouAreDeadRS.html |    9 +-
 .../TestHeapMemoryManager.RegionServerStub.html    |    7 +
 ...henInitializing.RegisterAndDieRegionServer.html |    9 +-
 ...stRegionMergeTransactionOnCluster.MyMaster.html |    4 +-
 ...stRegionServerReportForDuty.MyRegionServer.html |    9 +-
 ...ServerReportForDuty.NeverInitializedMaster.html |    4 +-
 ...erHeartbeatMessages.HeartbeatHRegionServer.html |    9 +-
 ...RPCScanMetrics.RegionServerWithScanMetrics.html |    9 +-
 .../TestShutdownWhileWALBroken.MyRegionServer.html |    9 +-
 .../TestSplitLogWorker.DummyServer.html            |    7 +
 .../TestSplitTransactionOnCluster.MyMaster.html    |    4 +-
 .../TestClaimReplicationQueue.HMasterForTest.html  |    4 +-
 ...tionEndpoint.DummyHBaseReplicationEndpoint.html |    7 +
 ...estReplicationBase.ReplicationEndpointTest.html |    7 +
 ...int.InterClusterReplicationEndpointForTest.html |    7 +
 .../TestReplicationProcedureRetry.MockHMaster.html |    4 +-
 ...leRegionServerRestarts.RegionServerForTest.html |    9 +-
 ...stReplicationSource.BadReplicationEndpoint.html |    7 +
 ...icationSource.DoNothingReplicationEndpoint.html |    7 +
 ...eplicationSource.FaultyReplicationEndpoint.html |    7 +
 ...ReplicationSource.FlakyReplicationEndpoint.html |    7 +
 ...eplicationSource.ShutdownDelayRegionServer.html |    9 +-
 .../TestReplicationSourceManager.DummyServer.html  |    7 +
 ...FailureInjectingReplicationEndpointForTest.html |    7 +
 .../TestReplicator.ReplicationEndpointForTest.html |    7 +
 ...TestSerialReplicationEndpoint.TestEndpoint.html |    7 +
 .../TestMigrateRSGroupInfo.HMasterForTest.html     |    4 +-
 .../hbase/rsgroup/VerifyingRSGroupAdmin.html       |    7 +
 .../token/TestTokenAuthentication.TokenServer.html |    7 +
 .../token/TestZKSecretWatcher.MockAbortable.html   |    7 +
 ...stZKSecretWatcherRefreshKeys.MockAbortable.html |    7 +
 .../org/apache/hadoop/hbase/util/MockServer.html   |    7 +
 ...gionServerAddressTracker.WarnOnlyAbortable.html |    7 +
 .../TestZKLeaderManager.MockAbortable.html         |    7 +
 .../zookeeper/TestZKMulti.ZKMultiAbortable.html    |    7 +
 .../zookeeper/TestZKNodeTracker.StubAbortable.html |    7 +
 .../zookeeper/TestZKUtil.WarnOnlyAbortable.html    |    7 +
 153 files changed, 7809 insertions(+), 7278 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index a637739..82c6ca9 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -456,7 +456,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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 0aff965..6dc6d76 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.3, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20210827200630+00'00')
-/CreationDate (D:20210827201727+00'00')
+/ModDate (D:20210828200603+00'00')
+/CreationDate (D:20210828201732+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/org/apache/hadoop/hbase/client/Admin.html b/apidocs/org/apache/hadoop/hbase/client/Admin.html
index c057a6b..c50b381 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Admin.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Admin.html
@@ -1587,6 +1587,13 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 </td>
 </tr>
 </table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Abortable</h3>
+<code>abort</code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/apidocs/org/apache/hadoop/hbase/client/Connection.html b/apidocs/org/apache/hadoop/hbase/client/Connection.html
index ac47761..0aabe96 100644
--- a/apidocs/org/apache/hadoop/hbase/client/Connection.html
+++ b/apidocs/org/apache/hadoop/hbase/client/Connection.html
@@ -229,7 +229,7 @@ extends org.apache.hadoop.hbase.Abortable, <a href="https://docs.oracle.com/java
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.Abortable</h3>
-<code>abort, isAborted</code></li>
+<code>abort, abort, isAborted</code></li>
 </ul>
 </li>
 </ul>
diff --git a/book.html b/book.html
index 817004a..1867be4 100644
--- a/book.html
+++ b/book.html
@@ -46227,7 +46227,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-alpha-2-SNAPSHOT<br>
-Last updated 2021-08-27 20:06:30 UTC
+Last updated 2021-08-28 20:06:03 UTC
 </div>
 </div>
 <link rel="stylesheet" href="./coderay-asciidoctor.css">
diff --git a/bulk-loads.html b/bulk-loads.html
index 9c05928..35235b8 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -161,7 +161,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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 83081bb..b4ec182 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -7268,7 +7268,7 @@
 <tr class="a">
 <td>annotation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated">MissingDeprecated</a></td>
-<td>7</td>
+<td>5</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>blocks</td>
@@ -7367,7 +7367,7 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>522</td>
+<td>524</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -35235,8 +35235,8 @@
 <th>Line</th></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>annotation</td>
-<td>MissingDeprecated</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 14 has parse error. Details: mismatched input ':' expecting &lt;EOF&gt; while parsing JAVADOC</td>
 <td>46</td></tr></table></div>
 <div class="section">
@@ -47697,145 +47697,145 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>2733</td></tr>
+<td>2726</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>2840</td></tr>
+<td>2833</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2854</td></tr>
+<td>2847</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2857</td></tr>
+<td>2850</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2935</td></tr>
+<td>2928</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2940</td></tr>
+<td>2933</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3250</td></tr>
+<td>3243</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3251</td></tr>
+<td>3244</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 7, expected level should be 6.</td>
-<td>3252</td></tr>
+<td>3245</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 9, expected level should be 8.</td>
-<td>3253</td></tr>
+<td>3246</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 9, expected level should be 8.</td>
-<td>3254</td></tr>
+<td>3247</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 11, expected level should be 10.</td>
-<td>3255</td></tr>
+<td>3248</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 9, expected level should be 8.</td>
-<td>3256</td></tr>
+<td>3249</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 7, expected level should be 6.</td>
-<td>3257</td></tr>
+<td>3250</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'synchronized rcurly' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3258</td></tr>
+<td>3251</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3259</td></tr>
+<td>3252</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 3, expected level should be 2.</td>
-<td>3260</td></tr>
+<td>3253</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>3434</td></tr>
+<td>3427</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
-<td>3439</td></tr>
+<td>3432</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3556</td></tr>
+<td>3549</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3576</td></tr>
+<td>3569</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>3593</td></tr>
+<td>3586</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
-<td>3614</td></tr>
+<td>3607</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>3642</td></tr></table></div>
+<td>3635</td></tr></table></div>
 <div class="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">
@@ -50142,8 +50142,8 @@
 <th>Line</th></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>annotation</td>
-<td>MissingDeprecated</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 54 has parse error. Details: no viable alternative at input '(' while parsing JAVADOC_INLINE_TAG</td>
 <td>59</td></tr>
 <tr class="a">
@@ -73350,7 +73350,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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 f480b87..23b4da9 100644
--- a/coc.html
+++ b/coc.html
@@ -230,7 +230,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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 5d3b6e0..10abaf4 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -302,7 +302,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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 cf4613f..0e9fcca 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -866,7 +866,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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 a19987b..2e5d026 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -183,7 +183,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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 64952bd..3a67cd4 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1190,7 +1190,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-27</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-08-28</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/index-all.html b/devapidocs/index-all.html
index 2de0abb..a6d6f4f 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -84,6 +84,11 @@
 <dd>
 <div class="block">Abort the server or client.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort(String)</a></span> - Method in interface org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></dt>
+<dd>
+<div class="block">It just call another abort method and the Throwable
+ parameter is null.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/BackupHFileCleaner.html#abort-java.lang.String-java.lang.Throwable-">abort(String, Throwable)</a></span> - Method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/BackupHFileCleaner.html" title="class in org.apache.hadoop.hbase.backup">BackupHFileCleaner</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedurePool.html#abort-java.lang.String-java.lang.Throwable-">abort(String, Throwable)</a></span> - Method in class org.apache.hadoop.hbase.backup.regionserver.<a href="org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedurePool.html" title="class in org.apache.hadoop.hbase.backup.regionserver">LogRollBackupSubprocedurePool</a></dt>
@@ -184,8 +189,6 @@
 <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.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-">abort(String)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#abort--">abort()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HStore.StoreFlusherImpl</a></dt>
 <dd>
 <div class="block">Abort the snapshot preparation.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/Abortable.html b/devapidocs/org/apache/hadoop/hbase/Abortable.html
index 30bc3c1..26f4c86 100644
--- a/devapidocs/org/apache/hadoop/hbase/Abortable.html
+++ b/devapidocs/org/apache/hadoop/hbase/Abortable.html
@@ -18,8 +18,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
+var methods = {"i0":18,"i1":6,"i2":6};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -130,19 +130,26 @@ public interface <a href="../../../../src-html/org/apache/hadoop/hbase/Abortable
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabE [...]
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
+<td class="colFirst"><code>default void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</code>
+<div class="block">It just call another abort method and the Throwable
+ parameter is null.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why,
      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</code>
 <div class="block">Abort the server or client.</div>
 </td>
 </tr>
-<tr id="i1" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></span>()</code>
 <div class="block">Check if the server or client was aborted.</div>
@@ -179,13 +186,30 @@ public interface <a href="../../../../src-html/org/apache/hadoop/hbase/Abortable
 </dl>
 </li>
 </ul>
+<a name="abort-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>abort</h4>
+<pre>default&nbsp;void&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Abortable.html#line.46">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;why)</pre>
+<div class="block">It just call another abort method and the Throwable
+ parameter is null.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>why</code> - Why we're aborting.</dd>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-"><code>abort(String, Throwable)</code></a></dd>
+</dl>
+</li>
+</ul>
 <a name="isAborted--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Abortable.html#line.44">isAborted</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/Abortable.html#line.54">isAborted</a>()</pre>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBaseClusterRegionServer.html b/devapidocs/org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBaseClusterRegionServer.html
index aef57ba..b259f4c 100644
--- a/devapidocs/org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBaseClusterRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/MiniHBaseCluster.MiniHBaseClusterRegionServer.html
@@ -270,7 +270,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-">abort</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#cacheTableDescriptor--">cacheTableDescriptor</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canCreateBaseZNode-- [...]
+<code><a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#cacheTableDescriptor--">cacheTableDescriptor</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canCreateBaseZNode--">canCreateBaseZNode</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canUpdateT [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Thread">
@@ -293,6 +293,13 @@ extends <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></h3>
 <code><a href="../../../../org/apache/hadoop/hbase/Server.html#getAsyncConnection--">getAsyncConnection</a></code></li>
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/Server.html b/devapidocs/org/apache/hadoop/hbase/Server.html
index eea1f34..9af5bff 100644
--- a/devapidocs/org/apache/hadoop/hbase/Server.html
+++ b/devapidocs/org/apache/hadoop/hbase/Server.html
@@ -199,7 +199,7 @@ extends <a href="../../../../org/apache/hadoop/hbase/Abortable.html" title="inte
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
-<code><a href="../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
+<code><a href="../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a>, <a href="../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Stoppable">
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/BackupHFileCleaner.html b/devapidocs/org/apache/hadoop/hbase/backup/BackupHFileCleaner.html
index e7586e3..d1c6cf4 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/BackupHFileCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/BackupHFileCleaner.html
@@ -294,6 +294,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.master.cleaner.FileCleanerDelegate">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedurePool.html b/devapidocs/org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedurePool.html
index 3f248c1..7dab53f 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedurePool.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/regionserver/LogRollBackupSubprocedurePool.html
@@ -244,6 +244,13 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Admin.html b/devapidocs/org/apache/hadoop/hbase/client/Admin.html
index ad6b16a..977823a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Admin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Admin.html
@@ -1591,6 +1591,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 </td>
 </tr>
 </table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.html b/devapidocs/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.html
index a0274e5..547d429 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AdminOverAsyncAdmin.html
@@ -1332,6 +1332,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" ti
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></h3>
 <code><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#abortProcedure-long-boolean-">abortProcedure</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#addColumnFamily-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.client.ColumnFamilyDescriptor-">addColumnFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">addReplicationP [...]
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Connection.html b/devapidocs/org/apache/hadoop/hbase/client/Connection.html
index b64d313..28bdd95 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Connection.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Connection.html
@@ -245,7 +245,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/ConnectionOverAsyncConnection.html b/devapidocs/org/apache/hadoop/hbase/client/ConnectionOverAsyncConnection.html
index 12af0b3..9c857ff 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/ConnectionOverAsyncConnection.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/ConnectionOverAsyncConnection.html
@@ -301,6 +301,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Connection.htm
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></h3>
 <code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getBufferedMutator-org.apache.hadoop.hbase.TableName-">getBufferedMutator</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable-org.apache.hadoop.hbase.TableName-">getTable</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">getTable</a></code></li>
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HBaseHbck.html b/devapidocs/org/apache/hadoop/hbase/client/HBaseHbck.html
index 020f118..ed8d168 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HBaseHbck.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HBaseHbck.html
@@ -297,6 +297,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Hbck.html" tit
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Hbck.html" title="interface in org.apache.hadoop.hbase.client">Hbck</a></h3>
 <code><a href="../../../../../org/apache/hadoop/hbase/client/Hbck.html#assigns-java.util.List-">assigns</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Hbck.html#unassigns-java.util.List-">unassigns</a></code></li>
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/Hbck.html b/devapidocs/org/apache/hadoop/hbase/client/Hbck.html
index c6199fe..1b97f98 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/Hbck.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/Hbck.html
@@ -215,7 +215,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="i
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.io.Closeable">
diff --git a/devapidocs/org/apache/hadoop/hbase/client/SharedConnection.html b/devapidocs/org/apache/hadoop/hbase/client/SharedConnection.html
index 5eaff3f..6410541 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/SharedConnection.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/SharedConnection.html
@@ -274,6 +274,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/Connection.htm
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></h3>
 <code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable-org.apache.hadoop.hbase.TableName-">getTable</a>, <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable-org.apache.hadoop.hbase.TableName-java.util.concurrent.ExecutorService-">getTable</a></code></li>
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
index bc1028b..08d86f7 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMaster.html
@@ -1524,7 +1524,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegion-java.lang.String-boolean-org.apache.hadoop.hbase.ServerName-">closeRegion</a>, <a href="../../../../../org/apache/hadoop/hbase [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegion-java.lang.String-boolean-org.apache.hadoop.hbase.ServerName-">closeRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createConnection-org.apache.hadoop.conf.Configuration-">createConnection</a>, <a hr [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Thread">
@@ -1559,7 +1559,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/MasterServices
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Stoppable">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html b/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
index 874114b..0376d04 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/HMasterCommandLine.LocalHMaster.html
@@ -261,7 +261,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" tit
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegion-java.lang.String-boolean-org.apache.hadoop.hbase.ServerName-">closeRegion</a>, <a href="../../../../../org/apache/hadoop/hbase [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegion-java.lang.String-boolean-org.apache.hadoop.hbase.ServerName-">closeRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createConnection-org.apache.hadoop.conf.Configuration-">createConnection</a>, <a hr [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Thread">
@@ -296,7 +296,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/master/HMaster.html" tit
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Stoppable">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html b/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html
index 758334f..1a34956 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/MasterServices.html
@@ -531,7 +531,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Stoppable">
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index af2abb3..c2d6522 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.3569">HRegionServer.MovedRegionInfo</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3562">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.3570">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.3563">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.3571">seqNum</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3564">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.3573">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.3566">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.3578">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.3571">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.3582">getSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3575">getSeqNum</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
index 20a41f2..98f1158 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.3960">HRegionServer.SystemExitWhenAbortTimeout</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3953">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.3962">SystemExitWhenAbortTimeout</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3955">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.3966">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3959">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 44ef116..098f811 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":9,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":9,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":9,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54 [...]
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":9,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":9,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":9,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54 [...]
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -703,106 +703,102 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-">abort</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;reason)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-java.lang.Throwable-">abort</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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)</code>
 <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.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-org.apache.hadoop.hbase.regionserver.HRegion-">addRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>
 <div class="block">Add to online regions.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addRegion-java.util.SortedMap-org.apache.hadoop.hbase.regionserver.HRegion-long-">addRegion</a></span>(<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 o [...]
          <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
          long&nbsp;size)</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#addToMovedRegions-java.lang.String-org.apache.hadoop.hbase.ServerName-long-boolean-">addToMovedRegions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#areAllUserRegionsOffline--">areAllUserRegionsOffline</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#blockAndCheckIfStopped-org.apache.hadoop.hbase.zookeeper.ZKNodeTracker-">blockAndCheckIfStopped</a></span>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)</code>
 <div class="block">Utilty method to wait indefinitely on a znode availability while checking
  if the region server is shut down</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUseReportRequest</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#buildRegionSpaceUseReportRequest-org.apache.hadoop.hbase.quotas.RegionSizeStore-">buildRegionSpaceUseReportRequest</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizes)</code>
 <div class="block">Builds a <code>RegionServerStatusProtos.RegionSpaceUseReportRequest</code> protobuf message from the region size map.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#buildReportAndSend-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface-org.apache.hadoop.hbase.quotas.RegionSizeStore-">buildReportAndSend</a></span>(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)</code>
 <div class="block">Builds the region size report and sends it to the master.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#buildServerLoad-long-long-">buildServerLoad</a></span>(long&nbsp;reportStartTime,
                long&nbsp;reportEndTime)</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#cacheTableDescriptor--">cacheTableDescriptor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canCreateBaseZNode--">canCreateBaseZNode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#canUpdateTableDescriptor--">canUpdateTableDescriptor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#checkCodecs-org.apache.hadoop.conf.Configuration-">checkCodecs</a></span>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>
 <div class="block">Run test on configured codecs to make sure supporting libs are in place.</div>
 </td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#checkFileSystem--">checkFileSystem</a></span>()</code>
 <div class="block">Checks to see if the file system is still accessible.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>private <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></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#cleanup-java.lang.Throwable-java.lang.String-">cleanup</a></span>(<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)</code>
 <div class="block">Cleanup after Throwable caught invoking method.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#clearRegionBlockCache-org.apache.hadoop.hbase.regionserver.Region-">clearRegionBlockCache</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeMetaTableRegions-boolean-">closeMetaTableRegions</a></span>(boolean&nbsp;abort)</code>
 <div class="block">Close meta region if we carry it</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegion-java.lang.String-boolean-org.apache.hadoop.hbase.ServerName-">closeRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName,
            boolean&nbsp;abort,
@@ -811,35 +807,35 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
  when stopping.</div>
 </td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeRegionIgnoreErrors-org.apache.hadoop.hbase.client.RegionInfo-boolean-">closeRegionIgnoreErrors</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                        boolean&nbsp;abort)</code>
 <div class="block">Try to close the region, logs a warning on failure but continues.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#closeUserRegions-boolean-">closeUserRegions</a></span>(boolean&nbsp;abort)</code>
 <div class="block">Schedule closes on all user regions.</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#configureInfoServer--">configureInfoServer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#constructRegionServer-java.lang.Class-org.apache.hadoop.conf.Configuration-">constructRegionServer</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class  [...]
                      org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Utility for constructing an instance of the passed HRegionServer class.</div>
 </td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#containsMetaTableRegions--">containsMetaTableRegions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionSpaceUse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#convertRegionSize-org.apache.hadoop.hbase.client.RegionInfo-java.lang.Long-">convertRegionSize</a></span>(<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)</code>
@@ -847,20 +843,20 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
  protobuf message.</div>
 </td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#convertThrowableToIOE-java.lang.Throwable-java.lang.String-">convertThrowableToIOE</a></span>(<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)</code>&nbsp;</td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createConnection-org.apache.hadoop.conf.Configuration-">createConnection</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createMyEphemeralNode--">createMyEphemeralNode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i28" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createNewReplicationInstance-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.HRegionServer-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALFactory-">createNewReplicationInstance</a></span>(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,
@@ -871,525 +867,525 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <div class="block">Load the replication executorService objects, if any</div>
 </td>
 </tr>
-<tr id="i29" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionLoad-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder-org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder-">createRegionLoad</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in [...]
                 org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr,
                 org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder&nbsp;regionSpecifier)</code>&nbsp;</td>
 </tr>
-<tr id="i30" class="altColor">
+<tr id="i29" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionLoad-java.lang.String-">createRegionLoad</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i31" class="rowColor">
+<tr id="i30" class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionServerStatusStub--">createRegionServerStatusStub</a></span>()</code>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it.</div>
 </td>
 </tr>
-<tr id="i32" class="altColor">
+<tr id="i31" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRegionServerStatusStub-boolean-">createRegionServerStatusStub</a></span>(boolean&nbsp;refresh)</code>
 <div class="block">Get the current master from ZooKeeper and open the RPC connection to it.</div>
 </td>
 </tr>
-<tr id="i33" class="rowColor">
+<tr id="i32" class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createReportRegionStateTransitionRequest-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">createReportRegionStateTransitionRequest</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">Regi [...]
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i33" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createRpcServices--">createRpcServices</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#createUserLoad-java.lang.String-org.apache.hadoop.hbase.regionserver.MetricsUserSource-">createUserLoad</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
               <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsUserSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsUserSource</a>&nbsp;userSource)</code>&nbsp;</td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#deleteMyEphemeralNode--">deleteMyEphemeralNode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#dumpRowLocks-java.io.PrintWriter-">dumpRowLocks</a></span>(<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)</code>
 <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>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#execRegionServerService-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest-">execRegionServerService</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                        org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;serviceRequest)</code>&nbsp;</td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#executeProcedure-long-org.apache.hadoop.hbase.procedure2.RSProcedureCallable-">executeProcedure</a></span>(long&nbsp;procId,
                 <a href="../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a>&nbsp;callable)</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#finishRegionProcedure-long-">finishRegionProcedure</a></span>(long&nbsp;procId)</code>
 <div class="block">See <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#submitRegionProcedure-long-"><code>submitRegionProcedure(long)</code></a>.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getAccessChecker--">getAccessChecker</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getActiveMaster--">getActiveMaster</a></span>()</code>
 <div class="block">Get active master address.</div>
 </td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getAsyncClusterConnection--">getAsyncClusterConnection</a></span>()</code>
 <div class="block">Returns a reference to the servers' async cluster connection.</div>
 </td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getBackupMasters--">getBackupMasters</a></span>()</code>
 <div class="block">Get backup masters address.</div>
 </td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getBlockCache--">getBlockCache</a></span>()</code>
 <div class="block">May be null if this is a master which not carry table.</div>
 </td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getChoreService--">getChoreService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getClusterId--">getClusterId</a></span>()</code>
 <div class="block">Get cluster id.</div>
 </td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCompactedHFilesDischarger--">getCompactedHFilesDischarger</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCompactionPressure--">getCompactionPressure</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCompactionRequestor--">getCompactionRequestor</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCompactSplitThread--">getCompactSplitThread</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.conf.Configuration</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getConfiguration--">getConfiguration</a></span>()</code>
 <div class="block">Gets the configuration object for this server.</div>
 </td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getConfigurationManager--">getConfigurationManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getConnection--">getConnection</a></span>()</code>
 <div class="block">Returns a reference to the servers' connection.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCoordinatedStateManager--">getCoordinatedStateManager</a></span>()</code>
 <div class="block">Get CoordinatedStateManager instance for this server.</div>
 </td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>(package private) <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 hr [...]
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOffHeapSize--">getCopyOfOnlineRegionsSortedByOffHeapSize</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>(package private) <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 hr [...]
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOnHeapSize--">getCopyOfOnlineRegionsSortedByOnHeapSize</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getDataRootDir--">getDataRootDir</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends javax.servlet.http.HttpServlet&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getDumpServlet--">getDumpServlet</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getEventLoopGroupConfig--">getEventLoopGroupConfig</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getExecutorService--">getExecutorService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFavoredNodesForRegion-java.lang.String-">getFavoredNodesForRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>
 <div class="block">Return the favored nodes for a region given its encoded name.</div>
 </td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFileSystem--">getFileSystem</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFlushPressure--">getFlushPressure</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFlushRequester--">getFlushRequester</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getFlushThroughputController--">getFlushThroughputController</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getHeapMemoryManager--">getHeapMemoryManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getInfoServer--">getInfoServer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getLastSequenceId-byte:A-">getLastSequenceId</a></span>(byte[]&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getLeaseManager--">getLeaseManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMasterAddressTracker--">getMasterAddressTracker</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMemStoreFlusher--">getMemStoreFlusher</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMetaLocations--">getMetaLocations</a></span>()</code>
 <div class="block">Get the location of meta regions.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase">MetaRegionLocationCache</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMetaRegionLocationCache--">getMetaRegionLocationCache</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i75" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMetrics--">getMetrics</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i76" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMobFileCache--">getMobFileCache</a></span>()</code>
 <div class="block">May be null if this is a master which not carry table.</div>
 </td>
 </tr>
-<tr id="i77" class="rowColor">
+<tr id="i76" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMovedRegion-java.lang.String-">getMovedRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i78" class="altColor">
+<tr id="i77" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getMyEphemeralNodePath--">getMyEphemeralNodePath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i79" class="rowColor">
+<tr id="i78" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getNamedQueueRecorder--">getNamedQueueRecorder</a></span>()</code>
 <div class="block">get NamedQueue Provider to add different logs to ringbuffer</div>
 </td>
 </tr>
-<tr id="i80" class="altColor">
+<tr id="i79" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getNonceManager--">getNonceManager</a></span>()</code>
 <div class="block">Only required for "old" log replay; if it's removed, remove this.</div>
 </td>
 </tr>
-<tr id="i81" class="rowColor">
+<tr id="i80" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getNumberOfOnlineRegions--">getNumberOfOnlineRegions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i82" class="altColor">
+<tr id="i81" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegion-byte:A-">getOnlineRegion</a></span>(byte[]&nbsp;regionName)</code>&nbsp;</td>
 </tr>
-<tr id="i83" class="rowColor">
+<tr id="i82" class="altColor">
 <td class="colFirst"><code>protected <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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegions--">getOnlineRegions</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i84" class="altColor">
+<tr id="i83" class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegionsAsPrintableString--">getOnlineRegionsAsPrintableString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i85" class="rowColor">
+<tr id="i84" class="altColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegionsLocalContext--">getOnlineRegionsLocalContext</a></span>()</code>
 <div class="block">For tests, web ui and metrics.</div>
 </td>
 </tr>
-<tr id="i86" class="altColor">
+<tr id="i85" class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineTables--">getOnlineTables</a></span>()</code>
 <div class="block">Gets the online tables in this RS.</div>
 </td>
 </tr>
-<tr id="i87" class="rowColor">
+<tr id="i86" class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getProcessName--">getProcessName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i88" class="altColor">
+<tr id="i87" class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegion-byte:A-">getRegion</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Protected Utility method for safely obtaining an HRegion handle.</div>
 </td>
 </tr>
-<tr id="i89" class="rowColor">
+<tr id="i88" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegion-java.lang.String-">getRegion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>
 <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.</div>
 </td>
 </tr>
-<tr id="i90" class="altColor">
+<tr id="i89" class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionByEncodedName-byte:A-java.lang.String-">getRegionByEncodedName</a></span>(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)</code>&nbsp;</td>
 </tr>
-<tr id="i91" class="rowColor">
+<tr id="i90" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionByEncodedName-java.lang.String-">getRegionByEncodedName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedRegionName)</code>&nbsp;</td>
 </tr>
-<tr id="i92" class="altColor">
+<tr id="i91" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegions--">getRegions</a></span>()</code>
 <div class="block">Get all online regions in this RS.</div>
 </td>
 </tr>
-<tr id="i93" class="rowColor">
+<tr id="i92" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegions-org.apache.hadoop.hbase.TableName-">getRegions</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Gets the online regions of the specified table.</div>
 </td>
 </tr>
-<tr id="i94" class="altColor">
+<tr id="i93" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerAccounting--">getRegionServerAccounting</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i95" class="rowColor">
+<tr id="i94" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerCoprocessorHost--">getRegionServerCoprocessorHost</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i96" class="altColor">
+<tr id="i95" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerCoprocessors--">getRegionServerCoprocessors</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i97" class="rowColor">
+<tr id="i96" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerRpcQuotaManager--">getRegionServerRpcQuotaManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i98" class="altColor">
+<tr id="i97" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServers--">getRegionServers</a></span>()</code>
 <div class="block">Get all the region servers address.</div>
 </td>
 </tr>
-<tr id="i99" class="rowColor">
+<tr id="i98" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionServerSpaceQuotaManager--">getRegionServerSpaceQuotaManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i100" class="altColor">
+<tr id="i99" class="rowColor">
 <td class="colFirst"><code><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;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRegionsInTransitionInRS--">getRegionsInTransitionInRS</a></span>()</code>
 <div class="block">Get the regions that are currently being opened or closed in the RS</div>
 </td>
 </tr>
-<tr id="i101" class="rowColor">
+<tr id="i100" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getReplicationSinkService--">getReplicationSinkService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i102" class="altColor">
+<tr id="i101" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getReplicationSourceService--">getReplicationSourceService</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i103" class="rowColor">
+<tr id="i102" class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRetryPauseTime--">getRetryPauseTime</a></span>()</code>
 <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>
 </td>
 </tr>
-<tr id="i104" class="altColor">
+<tr id="i103" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcServerInterface.html" title="interface in org.apache.hadoop.hbase.ipc">RpcServerInterface</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRpcServer--">getRpcServer</a></span>()</code>
 <div class="block">Returns a reference to the region server's RPC server</div>
 </td>
 </tr>
-<tr id="i105" class="rowColor">
+<tr id="i104" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getRSRpcServices--">getRSRpcServices</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i106" class="altColor">
+<tr id="i105" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getSecureBulkLoadManager--">getSecureBulkLoadManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i107" class="rowColor">
+<tr id="i106" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getServerName--">getServerName</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i108" class="altColor">
+<tr id="i107" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getStartcode--">getStartcode</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i109" class="rowColor">
+<tr id="i108" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getTableDescriptors--">getTableDescriptors</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i110" class="altColor">
+<tr id="i109" class="rowColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">getUseThisHostnameInstead</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i111" class="rowColor">
+<tr id="i110" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWAL-org.apache.hadoop.hbase.client.RegionInfo-">getWAL</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</code>&nbsp;</td>
 </tr>
-<tr id="i112" class="altColor">
+<tr id="i111" class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWalFactory--">getWalFactory</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i113" class="rowColor">
+<tr id="i112" class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWALFileSystem--">getWALFileSystem</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i114" class="altColor">
+<tr id="i113" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="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> [...]
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWalGroupsReplicationStatus--">getWalGroupsReplicationStatus</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i115" class="rowColor">
+<tr id="i114" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWalRoller--">getWalRoller</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i116" class="altColor">
+<tr id="i115" class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWALRootDir--">getWALRootDir</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i117" class="rowColor">
+<tr id="i116" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWALs--">getWALs</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i118" class="altColor">
+<tr id="i117" class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWriteRequestCount--">getWriteRequestCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i119" class="rowColor">
+<tr id="i118" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getZKPermissionWatcher--">getZKPermissionWatcher</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i120" class="altColor">
+<tr id="i119" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getZooKeeper--">getZooKeeper</a></span>()</code>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 </td>
 </tr>
-<tr id="i121" class="rowColor">
+<tr id="i120" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#handleReportForDutyResponse-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse-">handleReportForDutyResponse</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse&nbsp;c)</code>&nbsp;</td>
 </tr>
-<tr id="i122" class="altColor">
+<tr id="i121" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeFileSystem--">initializeFileSystem</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i123" class="rowColor">
+<tr id="i122" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeMemStoreChunkCreator--">initializeMemStoreChunkCreator</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i124" class="altColor">
+<tr id="i123" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeThreads--">initializeThreads</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i125" class="rowColor">
+<tr id="i124" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initializeZooKeeper--">initializeZooKeeper</a></span>()</code>
 <div class="block">Bring up connection to zk ensemble and then wait until a master for this cluster and then after
  that, wait until cluster 'up' flag has been set.</div>
 </td>
 </tr>
-<tr id="i126" class="altColor">
+<tr id="i125" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#initNamedQueueRecorder-org.apache.hadoop.conf.Configuration-">initNamedQueueRecorder</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i127" class="rowColor">
+<tr id="i126" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isAborted--">isAborted</a></span>()</code>
 <div class="block">Check if the server or client was aborted.</div>
 </td>
 </tr>
-<tr id="i128" class="altColor">
+<tr id="i127" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isClusterUp--">isClusterUp</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i129" class="rowColor">
+<tr id="i128" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isDataFileSystemOk--">isDataFileSystemOk</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i130" class="altColor">
+<tr id="i129" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isHealthCheckerConfigured--">isHealthCheckerConfigured</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i131" class="rowColor">
+<tr id="i130" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isHealthy--">isHealthy</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i132" class="altColor">
+<tr id="i131" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isOnline--">isOnline</a></span>()</code>
 <div class="block">Report the status of the server.</div>
 </td>
 </tr>
-<tr id="i133" class="rowColor">
+<tr id="i132" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isShutDown--">isShutDown</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i134" class="altColor">
+<tr id="i133" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isStopped--">isStopped</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i135" class="rowColor">
+<tr id="i134" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#isStopping--">isStopping</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i136" class="altColor">
+<tr id="i135" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#keepLooping--">keepLooping</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i137" class="rowColor">
+<tr id="i136" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#kill--">kill</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i138" class="altColor">
+<tr id="i137" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#login-org.apache.hadoop.hbase.security.UserProvider-java.lang.String-">login</a></span>(<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)</code>&nbsp;</td>
 </tr>
-<tr id="i139" class="rowColor">
+<tr id="i138" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
 </tr>
-<tr id="i140" class="altColor">
+<tr id="i139" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#movedRegionCacheExpiredTime--">movedRegionCacheExpiredTime</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i141" class="rowColor">
+<tr id="i140" class="altColor">
 <td class="colFirst"><code>private static &lt;T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>&gt;<br>T</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#newReplicationInstance-java.lang.String-java.lang.Class-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.regionserver.HRegionServer-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALFactory-">newReplicationInstance</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/jav [...]
                       <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,
@@ -1400,33 +1396,33 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
                       org.apache.hadoop.fs.Path&nbsp;oldLogDir,
                       <a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;walFactory)</code>&nbsp;</td>
 </tr>
-<tr id="i142" class="altColor">
+<tr id="i141" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">onConfigurationChange</a></span>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</code>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
 </td>
 </tr>
-<tr id="i143" class="rowColor">
+<tr id="i142" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">postOpenDeployTasks</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.PostOpenDeployContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.PostOpenDeployContext</a>&nbsp;context)</code>
 <div class="block">Tasks to perform after region open to complete deploy of region on regionserver</div>
 </td>
 </tr>
-<tr id="i144" class="altColor">
+<tr id="i143" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#preRegistrationInitialization--">preRegistrationInitialization</a></span>()</code>
 <div class="block">All initialization needed before we go register with Master.<br>
  Do bare minimum.</div>
 </td>
 </tr>
-<tr id="i145" class="rowColor">
+<tr id="i144" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#putUpWebUI--">putUpWebUI</a></span>()</code>
 <div class="block">Puts up the webui.</div>
 </td>
 </tr>
-<tr id="i146" class="altColor">
+<tr id="i145" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#regionLock-java.util.List-java.lang.String-org.apache.hadoop.hbase.Abortable-">regionLock</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase [...]
           <a href="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,
@@ -1434,34 +1430,34 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <div class="block">Master based locks on namespaces/tables/regions.</div>
 </td>
 </tr>
-<tr id="i147" class="rowColor">
+<tr id="i146" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#registerConfigurationObservers--">registerConfigurationObservers</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i148" class="altColor">
+<tr id="i147" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#registerService-org.apache.hbase.thirdparty.com.google.protobuf.Service-">registerService</a></span>(org.apache.hbase.thirdparty.com.google.protobuf.Service&nbsp;instance)</code>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
 </td>
 </tr>
-<tr id="i149" class="rowColor">
+<tr id="i148" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#remoteProcedureComplete-long-java.lang.Throwable-">remoteProcedureComplete</a></span>(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)</code>&nbsp;</td>
 </tr>
-<tr id="i150" class="altColor">
+<tr id="i149" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#removeFromMovedRegions-java.lang.String-">removeFromMovedRegions</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;encodedName)</code>&nbsp;</td>
 </tr>
-<tr id="i151" class="rowColor">
+<tr id="i150" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#removeRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.ServerName-">removeRegion</a></span>(<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)</code>
 <div class="block">Removes the given Region from the list of onlineRegions.</div>
 </td>
 </tr>
-<tr id="i152" class="altColor">
+<tr id="i151" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportFileArchivalForQuotas-org.apache.hadoop.hbase.TableName-java.util.Collection-">reportFileArchivalForQuotas</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                            <a href="https://docs.oracle.com/javase/8/docs/api/java/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 href="https://do [...]
@@ -1469,106 +1465,106 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
  just moved to the archive directory.</div>
 </td>
 </tr>
-<tr id="i153" class="rowColor">
+<tr id="i152" class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportForDuty--">reportForDuty</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i154" class="altColor">
+<tr id="i153" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportProcedureDone-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest-">reportProcedureDone</a></span>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest&nbsp;request)</code>&nbsp;</td>
 </tr>
-<tr id="i155" class="rowColor">
+<tr id="i154" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportRegionSizesForQuotas-org.apache.hadoop.hbase.quotas.RegionSizeStore-">reportRegionSizesForQuotas</a></span>(<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a>&nbsp;regionSizeStore)</code>
 <div class="block">Reports the given map of Regions and their size on the filesystem to the active Master.</div>
 </td>
 </tr>
-<tr id="i156" class="altColor">
+<tr id="i155" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">reportRegionStateTransition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionSta [...]
 <div class="block">Notify master that a handler requests to change a region state</div>
 </td>
 </tr>
-<tr id="i157" class="rowColor">
+<tr id="i156" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#run--">run</a></span>()</code>
 <div class="block">The HRegionServer sticks in this loop until closed.</div>
 </td>
 </tr>
-<tr id="i158" class="altColor">
+<tr id="i157" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#scheduleAbortTimer--">scheduleAbortTimer</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i159" class="rowColor">
+<tr id="i158" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setAbortRequested--">setAbortRequested</a></span>()</code>
 <div class="block">Sets the abort state if not already set.</div>
 </td>
 </tr>
-<tr id="i160" class="altColor">
+<tr id="i159" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupClusterConnection--">setupClusterConnection</a></span>()</code>
 <div class="block">Setup our cluster connection if not already initialized.</div>
 </td>
 </tr>
-<tr id="i161" class="rowColor">
+<tr id="i160" class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupNetty-org.apache.hadoop.conf.Configuration-">setupNetty</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>&nbsp;</td>
 </tr>
-<tr id="i162" class="altColor">
+<tr id="i161" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupWALAndReplication--">setupWALAndReplication</a></span>()</code>
 <div class="block">Setup WAL log and replication if enabled.</div>
 </td>
 </tr>
-<tr id="i163" class="rowColor">
+<tr id="i162" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#setupWindows-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.conf.ConfigurationManager-">setupWindows</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
             <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;cm)</code>
 <div class="block">If running on Windows, do windows-specific setup.</div>
 </td>
 </tr>
-<tr id="i164" class="altColor">
+<tr id="i163" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#shutdownChore-org.apache.hadoop.hbase.ScheduledChore-">shutdownChore</a></span>(<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</code>&nbsp;</td>
 </tr>
-<tr id="i165" class="rowColor">
+<tr id="i164" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#shutdownWAL-boolean-">shutdownWAL</a></span>(boolean&nbsp;close)</code>&nbsp;</td>
 </tr>
-<tr id="i166" class="altColor">
+<tr id="i165" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#skipReportingTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">skipReportingTransition</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.RegionStateTransitionContext.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerServices.RegionStateTransi [...]
 <div class="block">Helper method for use in tests.</div>
 </td>
 </tr>
-<tr id="i167" class="rowColor">
+<tr id="i166" class="altColor">
 <td class="colFirst"><code>private static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#sleepInterrupted-long-">sleepInterrupted</a></span>(long&nbsp;millis)</code>&nbsp;</td>
 </tr>
-<tr id="i168" class="altColor">
+<tr id="i167" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#startHeapMemoryManager--">startHeapMemoryManager</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i169" class="rowColor">
+<tr id="i168" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#startReplicationService--">startReplicationService</a></span>()</code>
 <div class="block">Start up replication source and sink handlers.</div>
 </td>
 </tr>
-<tr id="i170" class="altColor">
+<tr id="i169" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#startServices--">startServices</a></span>()</code>
 <div class="block">Start maintenance Threads, Server, Worker and lease checker threads.</div>
 </td>
 </tr>
-<tr id="i171" class="rowColor">
+<tr id="i170" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stop-java.lang.String-">stop</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg)</code>
 <div class="block">Stop this service.</div>
 </td>
 </tr>
-<tr id="i172" class="altColor">
+<tr id="i171" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stop-java.lang.String-boolean-org.apache.hadoop.hbase.security.User-">stop</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
     boolean&nbsp;force,
@@ -1576,69 +1572,69 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <div class="block">Stops the regionserver.</div>
 </td>
 </tr>
-<tr id="i173" class="rowColor">
+<tr id="i172" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stopServiceThreads--">stopServiceThreads</a></span>()</code>
 <div class="block">Wait on all threads to finish.</div>
 </td>
 </tr>
-<tr id="i174" class="altColor">
+<tr id="i173" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#submitRegionProcedure-long-">submitRegionProcedure</a></span>(long&nbsp;procId)</code>
 <div class="block">Will ignore the open/close region procedures which already submitted or executed.</div>
 </td>
 </tr>
-<tr id="i175" class="rowColor">
+<tr id="i174" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i176" class="altColor">
+<tr id="i175" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#triggerFlushInPrimaryRegion-org.apache.hadoop.hbase.regionserver.HRegion-">triggerFlushInPrimaryRegion</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</code>
 <div class="block">Trigger a flush in the primary region replica if this region is a secondary replica.</div>
 </td>
 </tr>
-<tr id="i177" class="rowColor">
+<tr id="i176" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#tryRegionServerReport-long-long-">tryRegionServerReport</a></span>(long&nbsp;reportStartTime,
                      long&nbsp;reportEndTime)</code>&nbsp;</td>
 </tr>
-<tr id="i178" class="altColor">
+<tr id="i177" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#unassign-byte:A-">unassign</a></span>(byte[]&nbsp;regionName)</code>
 <div class="block">Unassign the given region from the current regionserver and assign it randomly.</div>
 </td>
 </tr>
-<tr id="i179" class="rowColor">
+<tr id="i178" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#updateConfiguration--">updateConfiguration</a></span>()</code>
 <div class="block">Reload the configuration from disk.</div>
 </td>
 </tr>
-<tr id="i180" class="altColor">
+<tr id="i179" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#updateRegionFavoredNodesMapping-java.lang.String-java.util.List-">updateRegionFavoredNodesMapping</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;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)</code>
 <div class="block">Used to update the favored nodes mapping when required.</div>
 </td>
 </tr>
-<tr id="i181" class="rowColor">
+<tr id="i180" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#waitForMasterActive--">waitForMasterActive</a></span>()</code>
 <div class="block">Wait for an active Master.</div>
 </td>
 </tr>
-<tr id="i182" class="altColor">
+<tr id="i181" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#waitForServerOnline--">waitForServerOnline</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i183" class="rowColor">
+<tr id="i182" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#waitOnAllRegionsToClose-boolean-">waitOnAllRegionsToClose</a></span>(boolean&nbsp;abort)</code>
 <div class="block">Wait on regions close.</div>
 </td>
 </tr>
-<tr id="i184" class="altColor">
+<tr id="i183" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#walRollRequestFinished--">walRollRequestFinished</a></span>()</code>
 <div class="block">For testing</div>
@@ -1666,6 +1662,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></h3>
 <code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getAsyncConnection--">getAsyncConnection</a></code></li>
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
@@ -2683,7 +2686,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.3591">TIMEOUT_REGION_MOVED</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3584">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>
@@ -3712,26 +3715,13 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcSe
 </dl>
 </li>
 </ul>
-<a name="abort-java.lang.String-">
-<!--   -->
-</a>
-<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.2642">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>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#abort-java.lang.String-java.lang.Throwable-"><code>abort(String, Throwable)</code></a></dd>
-</dl>
-</li>
-</ul>
 <a name="isAborted--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2647">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2640">isAborted</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">Abortable</a></code></span></div>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>
@@ -3749,7 +3739,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.2657">kill</a>()</pre>
+protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2650">kill</a>()</pre>
 </li>
 </ul>
 <a name="scheduleAbortTimer--">
@@ -3758,7 +3748,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.2663">scheduleAbortTimer</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2656">scheduleAbortTimer</a>()</pre>
 </li>
 </ul>
 <a name="shutdownChore-org.apache.hadoop.hbase.ScheduledChore-">
@@ -3767,7 +3757,7 @@ protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdownChore</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2682">shutdownChore</a>(<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2675">shutdownChore</a>(<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a>&nbsp;chore)</pre>
 </li>
 </ul>
 <a name="stopServiceThreads--">
@@ -3776,7 +3766,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.2691">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2684">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>
@@ -3787,7 +3777,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.2736">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.2729">getReplicationSourceService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getReplicationSourceService--">getReplicationSourceService</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>
@@ -3803,7 +3793,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.2743">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.2736">getReplicationSinkService</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the object that implements the replication sink executorService.</dd>
@@ -3816,7 +3806,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.2755">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.2748">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
@@ -3834,7 +3824,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.2768">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.2761">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>
@@ -3852,7 +3842,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.2842">keepLooping</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2835">keepLooping</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if we should break loop because cluster is going down or
@@ -3866,7 +3856,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.2853">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.2846">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>
@@ -3880,7 +3870,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.2896">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.2889">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>
@@ -3898,7 +3888,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.2926">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2919">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>
@@ -3912,7 +3902,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.2949">closeUserRegions</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2942">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>
@@ -3928,7 +3918,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getInfoServer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2965">getInfoServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2958">getInfoServer</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the info server</dd>
@@ -3941,7 +3931,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2973">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2966">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -3956,7 +3946,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopping</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2978">isStopping</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2971">isStopping</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#isStopping--">isStopping</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -3971,7 +3961,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2983">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2976">getConfiguration</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getConfiguration--">Server</a></code></span></div>
 <div class="block">Gets the configuration object for this server.</div>
 <dl>
@@ -3986,7 +3976,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--">
@@ -3995,7 +3985,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.2991">getNumberOfOnlineRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2984">getNumberOfOnlineRegions</a>()</pre>
 </li>
 </ul>
 <a name="getOnlineRegionsLocalContext--">
@@ -4004,7 +3994,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.3000">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.2993">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>
@@ -4016,7 +4006,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.3006">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.2999">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>
@@ -4031,7 +4021,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.3011">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.3004">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>
@@ -4042,7 +4032,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
@@ -4056,7 +4046,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
@@ -4070,7 +4060,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartcode</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3049">getStartcode</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3042">getStartcode</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>time stamp in millis of when this region server was started</dd>
@@ -4083,7 +4073,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.3055">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.3048">getFlushRequester</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushRequester--">getFlushRequester</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>
@@ -4098,7 +4088,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.3060">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.3053">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>
@@ -4114,7 +4104,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.3065">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.3058">getLeaseManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getLeaseManager--">getLeaseManager</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>
@@ -4129,7 +4119,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataRootDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3072">getDataRootDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3065">getDataRootDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the rootDir.</dd>
@@ -4142,7 +4132,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3077">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3070">getFileSystem</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getFileSystem--">getFileSystem</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -4157,7 +4147,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.3084">isDataFileSystemOk</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3077">isDataFileSystemOk</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>true</code> when the data file system is available, <code>false</code> otherwise.</dd>
@@ -4170,7 +4160,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3091">getWALRootDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3084">getWALRootDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the walRootDir.</dd>
@@ -4183,7 +4173,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3098">getWALFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3091">getWALFileSystem</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the walFs.</dd>
@@ -4196,7 +4186,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</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.3103">toString</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.3096">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></code></dd>
@@ -4209,7 +4199,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getZooKeeper</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3108">getZooKeeper</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3101">getZooKeeper</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getZooKeeper--">Server</a></code></span></div>
 <div class="block">Gets the ZooKeeper instance for this server.</div>
 <dl>
@@ -4224,7 +4214,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoordinatedStateManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3113">getCoordinatedStateManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3106">getCoordinatedStateManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getCoordinatedStateManager--">Server</a></code></span></div>
 <div class="block">Get CoordinatedStateManager instance for this server.</div>
 <dl>
@@ -4239,7 +4229,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.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.html#line.3118">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.html#line.3111">getServerName</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getServerName--">getServerName</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -4254,7 +4244,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.3122">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.3115">getRegionServerCoprocessorHost</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionInRS--">
@@ -4263,7 +4253,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.3127">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.3120">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>
@@ -4280,7 +4270,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getExecutorService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3132">getExecutorService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3125">getExecutorService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getExecutorService--">getExecutorService</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>
@@ -4295,7 +4285,7 @@ protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getChoreService</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3137">getChoreService</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3130">getChoreService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getChoreService--">getChoreService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></dd>
@@ -4310,7 +4300,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.3142">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.3135">getRegionServerRpcQuotaManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerRpcQuotaManager--">getRegionServerRpcQuotaManager</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>
@@ -4325,7 +4315,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.3152">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.3145">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,
@@ -4345,7 +4335,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.3178">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.3171">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,
@@ -4366,7 +4356,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-">
@@ -4375,7 +4365,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.3210">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.3203">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>
@@ -4386,7 +4376,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.3227">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.3220">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>
@@ -4399,7 +4389,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.3249">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.3242">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
@@ -4422,7 +4412,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.3263">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.3256">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>
@@ -4439,7 +4429,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.3277">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.3270">getOnlineTables</a>()</pre>
 <div class="block">Gets the online tables in this RS.
  This method looks at the in-memory onlineRegions.</div>
 <dl>
@@ -4454,7 +4444,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.3287">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.3280">getRegionServerCoprocessors</a>()</pre>
 </li>
 </ul>
 <a name="closeRegionIgnoreErrors-org.apache.hadoop.hbase.client.RegionInfo-boolean-">
@@ -4463,7 +4453,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.3315">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.3308">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>
@@ -4478,7 +4468,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.3346">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.3339">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>
@@ -4511,7 +4501,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.3414">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.3407">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
@@ -4525,7 +4515,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.3420">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.3413">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
@@ -4545,7 +4535,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.3426">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.3419">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>
@@ -4566,7 +4556,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.3454">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.3447">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>
@@ -4585,7 +4575,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.3460">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.3453">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>
@@ -4599,7 +4589,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.3465">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.3458">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>
@@ -4614,7 +4604,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.3494">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.3487">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>
@@ -4633,7 +4623,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.3516">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.3509">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>
@@ -4649,7 +4639,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.3527">checkFileSystem</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3520">checkFileSystem</a>()</pre>
 <div class="block">Checks to see if the file system is still accessible. If not, sets
  abortRequested and stopRequested</div>
 <dl>
@@ -4664,7 +4654,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.3540">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.3533">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>
@@ -4680,7 +4670,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.3560">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.3553">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>
@@ -4700,7 +4690,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.3565">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.3558">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>
@@ -4717,7 +4707,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.3593">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.3586">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>
@@ -4729,7 +4719,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.3603">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.3596">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-">
@@ -4739,7 +4729,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.3608">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.3601">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--">
@@ -4749,7 +4739,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.3613">movedRegionCacheExpiredTime</a>()</pre>
+public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3606">movedRegionCacheExpiredTime</a>()</pre>
 </li>
 </ul>
 <a name="getMyEphemeralNodePath--">
@@ -4758,7 +4748,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.3617">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.3610">getMyEphemeralNodePath</a>()</pre>
 </li>
 </ul>
 <a name="isHealthCheckerConfigured--">
@@ -4767,7 +4757,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.3621">isHealthCheckerConfigured</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3614">isHealthCheckerConfigured</a>()</pre>
 </li>
 </ul>
 <a name="getCompactSplitThread--">
@@ -4776,7 +4766,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.3629">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.3622">getCompactSplitThread</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>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</dd>
@@ -4789,7 +4779,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.3633">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.3626">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>
@@ -4804,7 +4794,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.3681">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.3674">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>
@@ -4820,7 +4810,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.3691">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.3684">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>
@@ -4836,7 +4826,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getAccessChecker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3696">getAccessChecker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3689">getAccessChecker</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getAccessChecker--">getAccessChecker</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>
@@ -4851,7 +4841,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getZKPermissionWatcher</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3701">getZKPermissionWatcher</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3694">getZKPermissionWatcher</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getZKPermissionWatcher--">getZKPermissionWatcher</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>
@@ -4867,7 +4857,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <li class="blockList">
 <h4>getConfigurationManager</h4>
 <pre>@InterfaceAudience.Private
-<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3709">getConfigurationManager</a>()</pre>
+<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3702">getConfigurationManager</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>: Returns the ConfigurationManager object for testing purposes.</dd>
@@ -4880,7 +4870,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptors</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3717">getTableDescriptors</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3710">getTableDescriptors</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getTableDescriptors--">getTableDescriptors</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>
@@ -4895,7 +4885,7 @@ public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/re
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfiguration</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3724">updateConfiguration</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3717">updateConfiguration</a>()</pre>
 <div class="block">Reload the configuration from disk.</div>
 </li>
 </ul>
@@ -4905,7 +4895,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.3731">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.3724">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--">
@@ -4914,7 +4904,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.3746">getCompactionPressure</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3739">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>
@@ -4933,7 +4923,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.3760">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.3753">getHeapMemoryManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getHeapMemoryManager--">getHeapMemoryManager</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>
@@ -4948,7 +4938,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.3764">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.3757">getMemStoreFlusher</a>()</pre>
 </li>
 </ul>
 <a name="walRollRequestFinished--">
@@ -4958,7 +4948,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.3773">walRollRequestFinished</a>()</pre>
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3766">walRollRequestFinished</a>()</pre>
 <div class="block">For testing</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4972,7 +4962,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.3778">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.3771">getFlushThroughputController</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushThroughputController--">getFlushThroughputController</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>
@@ -4987,7 +4977,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.3783">getFlushPressure</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3776">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>
@@ -5004,7 +4994,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.3792">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.3785">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>
@@ -5020,7 +5010,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.3806">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.3799">getMetrics</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getMetrics--">getMetrics</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>
@@ -5035,7 +5025,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.3811">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.3804">getSecureBulkLoadManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getSecureBulkLoadManager--">getSecureBulkLoadManager</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>
@@ -5050,7 +5040,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.3816">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.3809">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>
@@ -5067,7 +5057,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.3824">unassign</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3817">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
@@ -5090,7 +5080,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.3829">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.3822">getRegionServerSpaceQuotaManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerSpaceQuotaManager--">getRegionServerSpaceQuotaManager</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>
@@ -5105,7 +5095,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.3834">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.3827">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
@@ -5127,7 +5117,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getEventLoopGroupConfig</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3870">getEventLoopGroupConfig</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3863">getEventLoopGroupConfig</a>()</pre>
 </li>
 </ul>
 <a name="createConnection-org.apache.hadoop.conf.Configuration-">
@@ -5136,7 +5126,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3875">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3868">createConnection</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>
@@ -5152,7 +5142,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.3880">executeProcedure</a>(long&nbsp;procId,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3873">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>
@@ -5162,7 +5152,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.3884">remoteProcedureComplete</a>(long&nbsp;procId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3877">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>
@@ -5172,7 +5162,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.3888">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.3881">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>
@@ -5186,7 +5176,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.3926">submitRegionProcedure</a>(long&nbsp;procId)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3919">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
@@ -5214,7 +5204,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.3948">finishRegionProcedure</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3941">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>
@@ -5228,7 +5218,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>isShutDown</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3953">isShutDown</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3946">isShutDown</a>()</pre>
 </li>
 </ul>
 <a name="getAsyncClusterConnection--">
@@ -5237,7 +5227,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getAsyncClusterConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3976">getAsyncClusterConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3969">getAsyncClusterConnection</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getAsyncClusterConnection--">Server</a></code></span></div>
 <div class="block">Returns a reference to the servers' async cluster connection.
  <p/>
@@ -5256,7 +5246,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.3981">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.3974">getCompactedHFilesDischarger</a>()</pre>
 </li>
 </ul>
 <a name="getRetryPauseTime--">
@@ -5266,7 +5256,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.3990">getRetryPauseTime</a>()</pre>
+public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3983">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>
@@ -5280,7 +5270,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.3995">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.3988">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>
@@ -5295,7 +5285,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.4000">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.3993">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>
@@ -5310,7 +5300,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServers</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.4005">getRegionServers</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.3998">getRegionServers</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionRegistryEndpoint.html#getRegionServers--">ConnectionRegistryEndpoint</a></code></span></div>
 <div class="block">Get all the region servers address.</div>
 <dl>
@@ -5325,7 +5315,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.4010">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.4003">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>
@@ -5340,7 +5330,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMetaRegionLocationCache</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase">MetaRegionLocationCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.4016">getMetaRegionLocationCache</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase">MetaRegionLocationCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.4009">getMetaRegionLocationCache</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html b/devapidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html
index 8c1a5aa..bfa0727 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/RegionServerServices.html
@@ -327,7 +327,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="inte
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">abort</a>, <a href="../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">isAborted</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Stoppable">
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
index f8f1049..2e2fc56 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
@@ -410,6 +410,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.ReplicationEndpoint">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
index 805e9fa..0a3ed08 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
@@ -178,6 +178,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" ti
 <h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index 0434e4f..1b8d899 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -457,6 +457,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.ReplicationEndpoint">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html
index f26586b..f48ce49 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RegionReplicaReplicationEndpoint.html
@@ -357,6 +357,13 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.replication.ReplicationEndpoint">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html
index aa2d01b..8b63b0f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html
@@ -269,6 +269,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Server.html" title
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></h3>
 <code><a href="../../../../../../org/apache/hadoop/hbase/Server.html#getAsyncConnection--">getAsyncConnection</a></code></li>
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.html b/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.html
index 38efb1e..c9a20b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.html
@@ -1442,6 +1442,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html"
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></h3>
 <code><a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">addReplicationPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html#addReplicationPeer-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-boolean-">addReplicationPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html#addReplicationPeerAsync-java.la [...]
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftConnection.html b/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftConnection.html
index ebf490a..292f502 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftConnection.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift2/client/ThriftConnection.html
@@ -374,6 +374,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.client.<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a></h3>
 <code><a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html#getHbck--">getHbck</a>, <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html#getHbck-org.apache.hadoop.hbase.ServerName-">getHbck</a>, <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable-org.apache.hadoop.hbase.TableName-">getTable</a>, <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable-org.apache.hadoop.hbase.TableName-java.u [...]
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
index 1de5a71..b3b3d4c 100644
--- a/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
+++ b/devapidocs/org/apache/hadoop/hbase/zookeeper/ZKWatcher.html
@@ -451,6 +451,13 @@ implements org.apache.zookeeper.Watcher, <a href="../../../../../org/apache/hado
 <h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.Abortable">
+<!--   -->
+</a>
+<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-">abort</a></code></li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Abortable.html b/devapidocs/src-html/org/apache/hadoop/hbase/Abortable.html
index 875f37a..7eef09c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Abortable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Abortable.html
@@ -46,11 +46,21 @@
 <span class="sourceLineNo">038</span>  void abort(String why, Throwable e);<a name="line.38"></a>
 <span class="sourceLineNo">039</span><a name="line.39"></a>
 <span class="sourceLineNo">040</span>  /**<a name="line.40"></a>
-<span class="sourceLineNo">041</span>   * Check if the server or client was aborted.<a name="line.41"></a>
-<span class="sourceLineNo">042</span>   * @return true if the server or client was aborted, false otherwise<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  boolean isAborted();<a name="line.44"></a>
-<span class="sourceLineNo">045</span>}<a name="line.45"></a>
+<span class="sourceLineNo">041</span>   * It just call another abort method and the Throwable<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   * parameter is null.<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   * @param why Why we're aborting.<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   * @see Abortable#abort(String, Throwable)<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  default void abort(String why) {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    abort(why, null);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  }<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span>  /**<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * Check if the server or client was aborted.<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * @return true if the server or client was aborted, false otherwise<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  boolean isAborted();<a name="line.54"></a>
+<span class="sourceLineNo">055</span>}<a name="line.55"></a>
 
 
 
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 566d77a..f768f6a 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
@@ -2644,1387 +2644,1380 @@
 <span class="sourceLineNo">2636</span>    return abortRequested.compareAndSet(false, true);<a name="line.2636"></a>
 <span class="sourceLineNo">2637</span>  }<a name="line.2637"></a>
 <span class="sourceLineNo">2638</span><a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  /**<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>   */<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>  public void abort(String reason) {<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>    abort(reason, null);<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>  }<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span><a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>  @Override<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>  public boolean isAborted() {<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>    return abortRequested.get();<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>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>   * hostname+port immediately.<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   */<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>  @InterfaceAudience.Private<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  protected void kill() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    this.killed = true;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>    abort("Simulated kill");<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>  }<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span><a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>  // Limits the time spent in the shutdown process.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>  private void scheduleAbortTimer() {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>    if (this.abortMonitor == null) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>      TimerTask abortTimeoutTask = null;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      try {<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        timerTaskCtor.setAccessible(true);<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      } catch (Exception e) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      }<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (abortTimeoutTask != null) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>      }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>    }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>  }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected final void shutdownChore(ScheduledChore chore) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (chore != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      chore.shutdown();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>  }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>   * have already been called.<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>   */<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>  protected void stopServiceThreads() {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>    // clean up the scheduled chores<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>    if (this.choreService != null) {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      shutdownChore(nonceManagerChore);<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      shutdownChore(compactionChecker);<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      shutdownChore(periodicFlusher);<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>      shutdownChore(healthCheckChore);<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      shutdownChore(executorStatusChore);<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>      shutdownChore(storefileRefresher);<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      shutdownChore(fsUtilizationChore);<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      shutdownChore(slowLogTableOpsChore);<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>      // cancel the remaining scheduled chores (in case we missed out any)<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>      // TODO: cancel will not cleanup the chores, so we need make sure we do not miss any<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      choreService.shutdown();<a name="line.2704"></a>
+<span class="sourceLineNo">2639</span>  @Override<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>  public boolean isAborted() {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    return abortRequested.get();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>  }<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span><a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>  /*<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>   * hostname+port immediately.<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>  @InterfaceAudience.Private<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>  protected void kill() {<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>    this.killed = true;<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>    abort("Simulated kill");<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>  }<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>  // Limits the time spent in the shutdown process.<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  private void scheduleAbortTimer() {<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span>    if (this.abortMonitor == null) {<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>      TimerTask abortTimeoutTask = null;<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>      try {<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>        timerTaskCtor.setAccessible(true);<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      } catch (Exception e) {<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>      }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>      if (abortTimeoutTask != null) {<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>      }<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    }<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>  }<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span><a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>  protected final void shutdownChore(ScheduledChore chore) {<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>    if (chore != null) {<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>      chore.shutdown();<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>    }<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>  }<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>  /**<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>   * have already been called.<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>   */<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>  protected void stopServiceThreads() {<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>    // clean up the scheduled chores<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    if (this.choreService != null) {<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>      shutdownChore(nonceManagerChore);<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>      shutdownChore(compactionChecker);<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>      shutdownChore(periodicFlusher);<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>      shutdownChore(healthCheckChore);<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>      shutdownChore(executorStatusChore);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>      shutdownChore(storefileRefresher);<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>      shutdownChore(fsUtilizationChore);<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>      shutdownChore(slowLogTableOpsChore);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>      // cancel the remaining scheduled chores (in case we missed out any)<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>      // TODO: cancel will not cleanup the chores, so we need make sure we do not miss any<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      choreService.shutdown();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span><a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    if (this.cacheFlusher != null) {<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>      this.cacheFlusher.join();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    }<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    if (this.walRoller != null) {<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      this.walRoller.close();<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>    if (this.cacheFlusher != null) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>      this.cacheFlusher.join();<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>    }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>    if (this.walRoller != null) {<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>      this.walRoller.close();<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>    }<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>    if (this.compactSplitThread != null) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>      this.compactSplitThread.join();<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>    }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>    if (this.executorService != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      this.executorService.shutdown();<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>    }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>    } else {<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>      if (this.replicationSourceHandler != null) {<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      }<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>      if (this.replicationSinkHandler != null) {<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>      }<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>    }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>  }<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span><a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>  /**<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>   * @return Return the object that implements the replication<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>   * source executorService.<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>   */<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>  @Override<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    return replicationSourceHandler;<a name="line.2737"></a>
+<span class="sourceLineNo">2706</span>    if (this.compactSplitThread != null) {<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>      this.compactSplitThread.join();<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>    }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    if (this.executorService != null) {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      this.executorService.shutdown();<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>    }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>    } else {<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>      if (this.replicationSourceHandler != null) {<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>      }<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>      if (this.replicationSinkHandler != null) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>      }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>    }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>  }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>  /**<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>   * @return Return the object that implements the replication<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>   * source executorService.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>   */<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>  @Override<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>    return replicationSourceHandler;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>  }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span><a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>  /**<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>   */<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    return replicationSinkHandler;<a name="line.2737"></a>
 <span class="sourceLineNo">2738</span>  }<a name="line.2738"></a>
 <span class="sourceLineNo">2739</span><a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>  /**<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>   */<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>    return replicationSinkHandler;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>  }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>  /**<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>   * Method will block until a master is available. You can break from this<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>   * block by requesting the server stop.<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>   *<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return master + port, or null if server has been stopped<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   */<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return createRegionServerStatusStub(false);<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /**<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * You can break from this block by requesting the server stop.<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @return master + port, or null if server has been stopped<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  @InterfaceAudience.Private<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    if (rssStub != null) {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      return masterAddressTracker.getMasterAddress();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    ServerName sn = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    long previousLogTime = 0;<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    boolean interrupted = false;<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    try {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      while (keepLooping()) {<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        if (sn == null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>          if (!keepLooping()) {<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>            // give up with no connection.<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>            return null;<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>          }<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>            LOG.debug("No master found; retry");<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>          if (sleepInterrupted(200)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>            interrupted = true;<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          }<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>          continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        // If we are on the active master, use the shortcut<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          break;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          BlockingRpcChannel channel =<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>              shortOperationTimeout);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>          break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>        } catch (IOException e) {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>            e = e instanceof RemoteException ?<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>            } else {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>            }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>          }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>          if (sleepInterrupted(200)) {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>            interrupted = true;<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>          }<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>        }<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      }<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } finally {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      if (interrupted) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>        Thread.currentThread().interrupt();<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      }<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>    this.rssStub = intRssStub;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>    this.lockStub = intLockStub;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    return sn;<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>  /**<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>   * @return True if we should break loop because cluster is going down or<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>   */<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  private boolean keepLooping() {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  }<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span><a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>  /*<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>   * us by the master.<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   * null if we failed to register.<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>   * @throws IOException<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>   */<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    if (masterServerName == null || rss == null) return null;<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>    RegionServerStartupResponse result = null;<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>    try {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      rpcServices.requestCount.reset();<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>      LOG.info("reportForDuty to master=" + masterServerName + " with isa="<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        + rpcServices.isa + ", startcode=" + this.startcode);<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      int port = rpcServices.isa.getPort();<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      }<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      request.setPort(port);<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      request.setServerStartCode(this.startcode);<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      request.setServerCurrentTime(now);<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>    } catch (ServiceException se) {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>            ioe);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        // Re-throw IOE will cause RS to abort<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>        throw ioe;<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>        LOG.debug("Master is not running yet");<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      } else {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>        LOG.warn("error telling master we are up", se);<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>      }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>      rssStub = null;<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>    }<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return result;<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    try {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>      if (rss == null) { // Try to connect one more time<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>        createRegionServerStatusStub();<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>        rss = rssStub;<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>        if (rss == null) {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>          // Still no luck, we tried<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>              .build();<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>        }<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>      }<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    } catch (ServiceException e) {<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>          .build();<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>    }<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>  }<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span><a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  /**<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>   * Close meta region if we carry it<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>   * @param abort Whether we're running an abort.<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    HRegion meta = null;<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    try {<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>        if (hri.isMetaRegion()) {<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>          meta = e.getValue();<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>        }<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>        if (meta != null) break;<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>      }<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    } finally {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>  }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>  /**<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>   * Schedule closes on all user regions.<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * that are already closed or that are closing.<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   * @param abort Whether we're running an abort.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  private void closeUserRegions(final boolean abort) {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    try {<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>        HRegion r = e.getValue();<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>          // Don't update zk with this close transition; pass false.<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>        }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      }<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>    } finally {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>    }<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span><a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  /** @return the info server */<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  public InfoServer getInfoServer() {<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>    return infoServer;<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>   * @return true if a stop has been requested.<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>   */<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public boolean isStopped() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.stopped;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public boolean isStopping() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return this.stopping;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  @Override<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>  public Configuration getConfiguration() {<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>    return conf;<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  }<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span><a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>    return this.onlineRegions;<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  }<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span><a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>  public int getNumberOfOnlineRegions() {<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>    return this.onlineRegions.size();<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span><a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   * For tests, web ui and metrics.<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>   */<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>    return Collections.unmodifiableCollection(regions);<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span><a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>  @Override<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  public void addRegion(HRegion region) {<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    configurationManager.registerObserver(region);<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>  }<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>      long size) {<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>    if (!sortedRegions.containsKey(size)) {<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>    }<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>    sortedRegions.get(size).add(region);<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  /**<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   *   the biggest.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   */<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>    // we'll sort the regions in reverse<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>    }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>    return sortedRegions;<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>  /**<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>   *   biggest.<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>   */<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>    // we'll sort the regions in reverse<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>    }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>    return sortedRegions;<a name="line.3043"></a>
+<span class="sourceLineNo">2741</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>   * Method will block until a master is available. You can break from this<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>   * block by requesting the server stop.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>   *<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>   * @return master + port, or null if server has been stopped<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>   */<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    return createRegionServerStatusStub(false);<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>  }<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span><a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>  /**<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>   * You can break from this block by requesting the server stop.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>   * @return master + port, or null if server has been stopped<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>   */<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>  @InterfaceAudience.Private<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    if (rssStub != null) {<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      return masterAddressTracker.getMasterAddress();<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    }<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>    ServerName sn = null;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    long previousLogTime = 0;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>    boolean interrupted = false;<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    try {<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>      while (keepLooping()) {<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (sn == null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (!keepLooping()) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            // give up with no connection.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            return null;<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            LOG.debug("No master found; retry");<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>          if (sleepInterrupted(200)) {<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            interrupted = true;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          continue;<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>        }<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span><a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        // If we are on the active master, use the shortcut<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>          break;<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>        }<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        try {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>          BlockingRpcChannel channel =<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>              shortOperationTimeout);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>          break;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>        } catch (IOException e) {<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            e = e instanceof RemoteException ?<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>            } else {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>            }<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>          }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>          if (sleepInterrupted(200)) {<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>            interrupted = true;<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>          }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>        }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>      }<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>    } finally {<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>      if (interrupted) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>        Thread.currentThread().interrupt();<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      }<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>    }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    this.rssStub = intRssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    this.lockStub = intLockStub;<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    return sn;<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span><a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  /**<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   * @return True if we should break loop because cluster is going down or<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>   */<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>  private boolean keepLooping() {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return !this.stopped &amp;&amp; isClusterUp();<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>  /*<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>   * us by the master.<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>   * null if we failed to register.<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>   * @throws IOException<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>   */<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    if (masterServerName == null || rss == null) return null;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>    RegionServerStartupResponse result = null;<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>    try {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>      rpcServices.requestCount.reset();<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>      LOG.info("reportForDuty to master=" + masterServerName + " with isa="<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        + rpcServices.isa + ", startcode=" + this.startcode);<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      int port = rpcServices.isa.getPort();<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>      }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>      request.setPort(port);<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>      request.setServerStartCode(this.startcode);<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>      request.setServerCurrentTime(now);<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>    } catch (ServiceException se) {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>            ioe);<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>        // Re-throw IOE will cause RS to abort<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>        throw ioe;<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        LOG.debug("Master is not running yet");<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>      } else {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>        LOG.warn("error telling master we are up", se);<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>      }<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>      rssStub = null;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    return result;<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>  }<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span><a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>  @Override<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>    try {<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>      if (rss == null) { // Try to connect one more time<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>        createRegionServerStatusStub();<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>        rss = rssStub;<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>        if (rss == null) {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>          // Still no luck, we tried<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>              .build();<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>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    } catch (ServiceException e) {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>          .build();<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>  /**<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>   * Close meta region if we carry it<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>   * @param abort Whether we're running an abort.<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>   */<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    HRegion meta = null;<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    try {<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>        if (hri.isMetaRegion()) {<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>          meta = e.getValue();<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>        }<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>        if (meta != null) break;<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>      }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    } finally {<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    }<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>  }<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span><a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  /**<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>   * Schedule closes on all user regions.<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * that are already closed or that are closing.<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   * @param abort Whether we're running an abort.<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>   */<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>  private void closeUserRegions(final boolean abort) {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>    try {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>        HRegion r = e.getValue();<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>          // Don't update zk with this close transition; pass false.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<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>    } finally {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>  }<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span><a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>  /** @return the info server */<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  public InfoServer getInfoServer() {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>    return infoServer;<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>  }<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span><a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>  /**<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>   * @return true if a stop has been requested.<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>   */<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>  @Override<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>  public boolean isStopped() {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    return this.stopped;<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>  @Override<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>  public boolean isStopping() {<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>    return this.stopping;<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>  }<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span><a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  @Override<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>  public Configuration getConfiguration() {<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    return conf;<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span><a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    return this.onlineRegions;<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>  }<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span><a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>  public int getNumberOfOnlineRegions() {<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>    return this.onlineRegions.size();<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  }<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span><a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  /**<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * For tests, web ui and metrics.<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>   */<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    return Collections.unmodifiableCollection(regions);<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>  }<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span><a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  @Override<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>  public void addRegion(HRegion region) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>    configurationManager.registerObserver(region);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span><a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>      long size) {<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>    if (!sortedRegions.containsKey(size)) {<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>    }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    sortedRegions.get(size).add(region);<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  }<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>  /**<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>   *   the biggest.<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>   */<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    // we'll sort the regions in reverse<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>    }<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>    return sortedRegions;<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span><a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>  /**<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   *   biggest.<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    // we'll sort the regions in reverse<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    }<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>    return sortedRegions;<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>  /**<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>   * @return time stamp in millis of when this region server was started<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   */<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>  public long getStartcode() {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    return this.startcode;<a name="line.3043"></a>
 <span class="sourceLineNo">3044</span>  }<a name="line.3044"></a>
 <span class="sourceLineNo">3045</span><a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  /**<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>   * @return time stamp in millis of when this region server was started<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>   */<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  public long getStartcode() {<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>    return this.startcode;<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span><a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  /** @return reference to FlushRequester */<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public FlushRequester getFlushRequester() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return this.cacheFlusher;<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 CompactionRequester getCompactionRequestor() {<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>    return this.compactSplitThread;<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 LeaseManager getLeaseManager() {<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    return leaseManager;<a name="line.3066"></a>
+<span class="sourceLineNo">3046</span>  /** @return reference to FlushRequester */<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>  @Override<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public FlushRequester getFlushRequester() {<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.cacheFlusher;<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>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public CompactionRequester getCompactionRequestor() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.compactSplitThread;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public LeaseManager getLeaseManager() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return leaseManager;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>   * @return Return the rootDir.<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  protected Path getDataRootDir() {<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>    return dataRootDir;<a name="line.3066"></a>
 <span class="sourceLineNo">3067</span>  }<a name="line.3067"></a>
 <span class="sourceLineNo">3068</span><a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>  /**<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>   * @return Return the rootDir.<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>   */<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>  protected Path getDataRootDir() {<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    return dataRootDir;<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>  }<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span><a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>  @Override<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>  public FileSystem getFileSystem() {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>    return dataFs;<a name="line.3078"></a>
+<span class="sourceLineNo">3069</span>  @Override<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  public FileSystem getFileSystem() {<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    return dataFs;<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  }<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span><a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  /**<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   */<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>  boolean isDataFileSystemOk() {<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    return this.dataFsOk;<a name="line.3078"></a>
 <span class="sourceLineNo">3079</span>  }<a name="line.3079"></a>
 <span class="sourceLineNo">3080</span><a name="line.3080"></a>
 <span class="sourceLineNo">3081</span>  /**<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3082"></a>
+<span class="sourceLineNo">3082</span>   * @return Return the walRootDir.<a name="line.3082"></a>
 <span class="sourceLineNo">3083</span>   */<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>  boolean isDataFileSystemOk() {<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return this.dataFsOk;<a name="line.3085"></a>
+<span class="sourceLineNo">3084</span>  public Path getWALRootDir() {<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    return walRootDir;<a name="line.3085"></a>
 <span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
 <span class="sourceLineNo">3087</span><a name="line.3087"></a>
 <span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * @return Return the walRootDir.<a name="line.3089"></a>
+<span class="sourceLineNo">3089</span>   * @return Return the walFs.<a name="line.3089"></a>
 <span class="sourceLineNo">3090</span>   */<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>  public Path getWALRootDir() {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    return walRootDir;<a name="line.3092"></a>
+<span class="sourceLineNo">3091</span>  public FileSystem getWALFileSystem() {<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>    return walFs;<a name="line.3092"></a>
 <span class="sourceLineNo">3093</span>  }<a name="line.3093"></a>
 <span class="sourceLineNo">3094</span><a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>  /**<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>   * @return Return the walFs.<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>   */<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>  public FileSystem getWALFileSystem() {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    return walFs;<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>  }<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span><a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  @Override<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>  public String toString() {<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>    return getServerName().toString();<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>  }<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span><a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>  @Override<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>  public ZKWatcher getZooKeeper() {<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    return zooKeeper;<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>  }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span><a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>  @Override<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    return csm;<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>  }<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span><a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>  @Override<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  public ServerName getServerName() {<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    return serverName;<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>  }<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span><a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>    return this.rsHost;<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>  @Override<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>    return this.regionsInTransitionInRS;<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>  }<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span><a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>  @Override<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>  public ExecutorService getExecutorService() {<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>    return executorService;<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>  }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>  @Override<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>  public ChoreService getChoreService() {<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>    return choreService;<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>  }<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span><a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>  @Override<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    return rsQuotaManager;<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>  }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>  //<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  // Main program and support routines<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>   * Load the replication executorService objects, if any<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   */<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>    // read in the name of the source replication class from the config file.<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span><a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>    // read in the name of the sink replication class from the config file.<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span><a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    // only one object.<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>      server.sameReplicationSourceAndSink = true;<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    } else {<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      server.sameReplicationSourceAndSink = false;<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><a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>      Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>    try {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>      throw new IOException("Could not find class for " + classname);<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>    }<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    return service;<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>  }<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span><a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    if(!this.isOnline()){<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>      return walGroupsReplicationStatus;<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>    }<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    }<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>    return walGroupsReplicationStatus;<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>  }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span><a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>  /**<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>   */<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>  static HRegionServer constructRegionServer(<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      final Configuration conf<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>  ) {<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>    try {<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>      return c.newInstance(conf);<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    } catch (Exception e) {<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>          + regionServerClass.toString(), e);<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>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>   */<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  public static void main(String[] args) {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>    VersionInfo.logVersion();<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>    @SuppressWarnings("unchecked")<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span><a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Gets the online regions of the specified table.<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * all the ONLINE regions in the table.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * @param tableName table to limit the scope of the query<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   */<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>  @Override<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>     synchronized (this.onlineRegions) {<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>           tableRegions.add(region);<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>     }<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>     return tableRegions;<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>   }<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span><a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>  @Override<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>    List&lt;HRegion&gt; allRegions;<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>    synchronized (this.onlineRegions) {<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      // Return a clone copy of the onlineRegions<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>    }<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>    return allRegions;<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>  }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>  /**<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>   * Gets the online tables in this RS.<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>   * This method looks at the in-memory onlineRegions.<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>   * @return all the online tables in this RS<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>   */<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>    synchronized (this.onlineRegions) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>      }<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>    }<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>    return tables;<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>  }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span><a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>  public String[] getRegionServerCoprocessors() {<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>    try {<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>    } catch (IOException exception) {<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>          "skipping.");<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>    }<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>    for (HRegion region: regions) {<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      try {<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>      } catch (IOException exception) {<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>            "; skipping.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<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>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    return coprocessors.toArray(new String[0]);<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>  }<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span><a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>  /**<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>   * @param region Region to close<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>   */<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    try {<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>            " - ignoring and continuing");<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>      }<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>    } catch (IOException e) {<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>          " - ignoring and continuing", e);<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><a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>  /**<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>   *<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>   * &lt;p&gt;<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>   * &lt;/p&gt;<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>   * &lt;p&gt;<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>   * &lt;/p&gt;<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>   *<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>   * @param encodedName Region to close<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>   * @param abort True if we are aborting<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>   * @return True if closed a region.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>   * @throws NotServingRegionException if the region is not online<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>   */<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>        final ServerName destination)<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      throws NotServingRegionException {<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>    //Check for permissions to close.<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>    // Can be null if we're calling close on a region that's not online<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>      try {<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>      } catch (IOException exp) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>        return false;<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>    // previous can come back 'null' if not in map.<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>        Boolean.FALSE);<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span><a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span>        // We're going to try to do a standard close then.<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>            " Doing a standard close now");<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>        return closeRegion(encodedName, abort, destination);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>      }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>      // Let's get the region from the online region list again<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>      actualRegion = this.getRegion(encodedName);<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>        // The master deletes the znode when it receives this exception.<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>      }<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>    } else if (previous == null) {<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>      return true;<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>    }<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span><a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>    if (actualRegion == null) {<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>      // The master deletes the znode when it receives this exception.<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span>          " is not online, and is not opening.");<a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>    }<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span><a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>    CloseRegionHandler crh;<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>    if (hri.isMetaRegion()) {<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>    } else {<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>    }<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>    this.executorService.submit(crh);<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    return true;<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>  }<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>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>   *         named region is not member of the online regions.<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>   */<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>  }<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span><a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>  @Override<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>    return this.onlineRegions.get(encodedRegionName);<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><a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>  @Override<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>    if (destination != null) {<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>      }<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>      if (selfMove) {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>      }<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>    }<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>    configurationManager.deregisterObserver(r);<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>    return toReturn != null;<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>  }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span><a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>  /**<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>   *<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>   */<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>      throws NotServingRegionException {<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>  }<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span><a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>      throws NotServingRegionException {<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>  }<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span><a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>    throws NotServingRegionException {<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>    if (region == null) {<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>      if (moveInfo != null) {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3471"></a>
+<span class="sourceLineNo">3095</span>  @Override<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>  public String toString() {<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>    return getServerName().toString();<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>  @Override<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>  public ZKWatcher getZooKeeper() {<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>    return zooKeeper;<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>  @Override<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    return csm;<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>  }<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span><a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>  @Override<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>  public ServerName getServerName() {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>    return serverName;<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>  }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span><a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    return this.rsHost;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  }<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>  @Override<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    return this.regionsInTransitionInRS;<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>  }<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span><a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>  @Override<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>  public ExecutorService getExecutorService() {<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>    return executorService;<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  }<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span><a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>  @Override<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>  public ChoreService getChoreService() {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    return choreService;<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>  }<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span><a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>  @Override<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>    return rsQuotaManager;<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>  }<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span><a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>  //<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>  // Main program and support routines<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>  //<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>  /**<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>   * Load the replication executorService objects, if any<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>   */<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    // read in the name of the source replication class from the config file.<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>    // read in the name of the sink replication class from the config file.<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span><a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    // only one object.<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>      server.sameReplicationSourceAndSink = true;<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    } else {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>      server.sameReplicationSourceAndSink = false;<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    }<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>  }<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span><a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>      Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>    try {<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>      throw new IOException("Could not find class for " + classname);<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    }<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    return service;<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>  }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span><a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>    if(!this.isOnline()){<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>      return walGroupsReplicationStatus;<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    }<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    }<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>    return walGroupsReplicationStatus;<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>  /**<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>   */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  static HRegionServer constructRegionServer(<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>      final Configuration conf<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>  ) {<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>    try {<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>      return c.newInstance(conf);<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>    } catch (Exception e) {<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>          + regionServerClass.toString(), e);<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    }<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>  }<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span><a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>  /**<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>   */<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>  public static void main(String[] args) {<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>    VersionInfo.logVersion();<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>    @SuppressWarnings("unchecked")<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span><a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>  }<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span><a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>  /**<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>   * Gets the online regions of the specified table.<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>   * all the ONLINE regions in the table.<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>   * @param tableName table to limit the scope of the query<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>   */<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  @Override<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>     synchronized (this.onlineRegions) {<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>           tableRegions.add(region);<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>         }<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>       }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>     }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>     return tableRegions;<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>  @Override<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>    List&lt;HRegion&gt; allRegions;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>    synchronized (this.onlineRegions) {<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>      // Return a clone copy of the onlineRegions<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>    }<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>    return allRegions;<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>  }<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span><a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>  /**<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * Gets the online tables in this RS.<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * This method looks at the in-memory onlineRegions.<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   * @return all the online tables in this RS<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>   */<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>    synchronized (this.onlineRegions) {<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>      }<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    }<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    return tables;<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>  }<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span><a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>  public String[] getRegionServerCoprocessors() {<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>    try {<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>    } catch (IOException exception) {<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span>          "skipping.");<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    }<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>    for (HRegion region: regions) {<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      try {<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>      } catch (IOException exception) {<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>            "; skipping.");<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>      }<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>    }<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>    return coprocessors.toArray(new String[0]);<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>  }<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span><a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>  /**<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>   * @param region Region to close<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>   */<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    try {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>            " - ignoring and continuing");<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>      }<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>    } catch (IOException e) {<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>          " - ignoring and continuing", e);<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>    }<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>  }<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span><a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>  /**<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>   *<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>   * &lt;p&gt;<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>   * &lt;/p&gt;<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span><a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>   * &lt;p&gt;<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>   * &lt;/p&gt;<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>   *<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>   * @param encodedName Region to close<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>   * @param abort True if we are aborting<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>   * @return True if closed a region.<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>   * @throws NotServingRegionException if the region is not online<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>   */<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>        final ServerName destination)<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>      throws NotServingRegionException {<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>    //Check for permissions to close.<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>    // Can be null if we're calling close on a region that's not online<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>      try {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>      } catch (IOException exp) {<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>        return false;<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>      }<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>    }<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span><a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    // previous can come back 'null' if not in map.<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>        Boolean.FALSE);<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span><a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>        // We're going to try to do a standard close then.<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>            " Doing a standard close now");<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>        return closeRegion(encodedName, abort, destination);<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>      // Let's get the region from the online region list again<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>      actualRegion = this.getRegion(encodedName);<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>        // The master deletes the znode when it receives this exception.<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>      }<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>    } else if (previous == null) {<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>      return true;<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>    if (actualRegion == null) {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      // The master deletes the znode when it receives this exception.<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>          " is not online, and is not opening.");<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>    }<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span><a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    CloseRegionHandler crh;<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    if (hri.isMetaRegion()) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>    } else {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>    }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>    this.executorService.submit(crh);<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>    return true;<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>  }<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span><a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>   /**<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>   *         named region is not member of the online regions.<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>   */<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>    return this.onlineRegions.get(encodedRegionName);<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 HRegion getRegion(final String encodedRegionName) {<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>    return this.onlineRegions.get(encodedRegionName);<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><a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>  @Override<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    if (destination != null) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>      }<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>      if (selfMove) {<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>      }<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>    }<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>    configurationManager.deregisterObserver(r);<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>    return toReturn != null;<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>  }<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span><a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>  /**<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>   *<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>   */<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>      throws NotServingRegionException {<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>  }<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span><a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>      throws NotServingRegionException {<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>  }<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span><a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>    throws NotServingRegionException {<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    if (region == null) {<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>      if (moveInfo != null) {<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>      }<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      String regionNameStr = regionName == null?<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>          " is opening on " + this.serverName);<a name="line.3471"></a>
 <span class="sourceLineNo">3472</span>      }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      String regionNameStr = regionName == null?<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>          " is opening on " + this.serverName);<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>      }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>        " is not online on " + this.serverName);<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>    }<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    return region;<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>  }<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span><a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>  /**<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>   * IOE if it isn't already.<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>   *<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>   * @param t Throwable<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>   * @param msg Message to log in error. Can be null.<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>   */<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>    if (t instanceof NotServingRegionException) {<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>      return t;<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>    }<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>    if (msg == null) {<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>      LOG.error("", e);<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>    } else {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>      LOG.error(msg, e);<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>      checkFileSystem();<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    }<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>    return t;<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span><a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
-<span class="sourceLineNo">3513</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.3513"></a>
-<span class="sourceLineNo">3514</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>  }<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span><a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>  /**<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>   * abortRequested and stopRequested<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>   *<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>   * @return false if file system is not available<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>   */<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>  boolean checkFileSystem() {<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>      try {<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>      } catch (IOException e) {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>        abort("File System not available", e);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>        this.dataFsOk = false;<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>      }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>    }<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>    return this.dataFsOk;<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>  }<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span><a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  @Override<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>    Address[] addr = new Address[favoredNodes.size()];<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>    // it is a map of region name to Address[]<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>      addr[i] = Address.fromParts(favoredNodes.get(i).getHostName(),<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>          favoredNodes.get(i).getPort());<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>    }<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>  }<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span><a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>  /**<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>   * comment around {@link #regionFavoredNodesMap} on why we convert to InetSocketAddress[]<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>   * here.<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>   * @param encodedRegionName<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>   * @return array of favored locations<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>   */<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>  @Override<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>    return Address.toSocketAddress(regionFavoredNodesMap.get(encodedRegionName));<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>  @Override<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>  public ServerNonceManager getNonceManager() {<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>    return this.nonceManager;<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>  }<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span><a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>  private static class MovedRegionInfo {<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>    private final ServerName serverName;<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>    private final long seqNum;<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span><a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      this.serverName = serverName;<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      this.seqNum = closeSeqNum;<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>    public ServerName getServerName() {<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>      return serverName;<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>    public long getSeqNum() {<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>      return seqNum;<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>    }<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>  /**<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>   * the number of network calls instead of reducing them.<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>   */<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span><a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>    if (selfMove) {<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>      return;<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>        closeSeqNum);<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>  }<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span><a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>  }<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span><a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>  @InterfaceAudience.Private<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  }<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span><a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>  @InterfaceAudience.Private<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  public int movedRegionCacheExpiredTime() {<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>        return TIMEOUT_REGION_MOVED;<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  }<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span><a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>  private String getMyEphemeralNodePath() {<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  }<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span><a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>  private boolean isHealthCheckerConfigured() {<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3623"></a>
+<span class="sourceLineNo">3473</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>        " is not online on " + this.serverName);<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    }<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>    return region;<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>  /**<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   * IOE if it isn't already.<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   *<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>   * @param t Throwable<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>   * @param msg Message to log in error. Can be null.<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>   */<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>    if (t instanceof NotServingRegionException) {<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>      return t;<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>    }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>    if (msg == null) {<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>      LOG.error("", e);<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    } else {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>      LOG.error(msg, e);<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>    }<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      checkFileSystem();<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>    }<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>    return t;<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>  }<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span><a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>  /**<a name="line.3505"></a>
+<span class="sourceLineNo">3506</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.3506"></a>
+<span class="sourceLineNo">3507</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>   */<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  }<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span><a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>  /**<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>   * abortRequested and stopRequested<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>   *<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>   * @return false if file system is not available<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>   */<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>  boolean checkFileSystem() {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>      try {<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>      } catch (IOException e) {<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>        abort("File System not available", e);<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>        this.dataFsOk = false;<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>      }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>    }<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>    return this.dataFsOk;<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>  @Override<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>    Address[] addr = new Address[favoredNodes.size()];<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>    // it is a map of region name to Address[]<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>      addr[i] = Address.fromParts(favoredNodes.get(i).getHostName(),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>          favoredNodes.get(i).getPort());<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>    }<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>  }<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span><a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>  /**<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>   * comment around {@link #regionFavoredNodesMap} on why we convert to InetSocketAddress[]<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>   * here.<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>   * @param encodedRegionName<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>   * @return array of favored locations<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>   */<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>  @Override<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>    return Address.toSocketAddress(regionFavoredNodesMap.get(encodedRegionName));<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>  @Override<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>  public ServerNonceManager getNonceManager() {<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>    return this.nonceManager;<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>  }<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span><a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>  private static class MovedRegionInfo {<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>    private final ServerName serverName;<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>    private final long seqNum;<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span><a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>      this.serverName = serverName;<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>      this.seqNum = closeSeqNum;<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>     }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span><a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>    public ServerName getServerName() {<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>      return serverName;<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>    }<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span><a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>    public long getSeqNum() {<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>      return seqNum;<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>    }<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>  }<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span><a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>  /**<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>   * the number of network calls instead of reducing them.<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>   */<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span><a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>    if (selfMove) {<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      return;<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>    }<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        closeSeqNum);<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>  }<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span><a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span><a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>  @InterfaceAudience.Private<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<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 int movedRegionCacheExpiredTime() {<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>        return TIMEOUT_REGION_MOVED;<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>  private String getMyEphemeralNodePath() {<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<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>  private boolean isHealthCheckerConfigured() {<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<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>  /**<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>   */<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>  public CompactSplit getCompactSplitThread() {<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>    return this.compactSplitThread;<a name="line.3623"></a>
 <span class="sourceLineNo">3624</span>  }<a name="line.3624"></a>
 <span class="sourceLineNo">3625</span><a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>  /**<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>   */<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  public CompactSplit getCompactSplitThread() {<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>    return this.compactSplitThread;<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  }<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span><a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    try {<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>      String serviceName = call.getServiceName();<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>      if (service == null) {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span>            serviceName);<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>      }<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      ServiceDescriptor serviceDesc =<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>          service.getDescriptorForType();<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span><a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>      String methodName = call.getMethodName();<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span>      MethodDescriptor methodDesc =<a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>          serviceDesc.findMethodByName(methodName);<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>      if (methodDesc == null) {<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>            " called on executorService " + serviceName);<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>      }<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span><a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>      Message request =<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>      final Message.Builder responseBuilder =<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>        if (message != null) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>          responseBuilder.mergeFrom(message);<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      });<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>      if (exception != null) {<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>        throw exception;<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>      }<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>    } catch (IOException ie) {<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>      throw new ServiceException(ie);<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>    }<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>  }<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span><a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>  /**<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>   * May be null if this is a master which not carry table.<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>   *<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>   * @return The block cache instance used by the regionserver.<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>   */<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>  @Override<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>    return Optional.ofNullable(this.blockCache);<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  }<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span><a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  /**<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span>   * May be null if this is a master which not carry table.<a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>   *<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>   * @return The cache for mob files used by the regionserver.<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>   */<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  @Override<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  }<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span><a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>  @Override<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>  public AccessChecker getAccessChecker() {<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    return rpcServices.getAccessChecker();<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>  }<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span><a name="line.3699"></a>
-<span class="sourceLineNo">3700</span>  @Override<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>  }<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span><a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>  /**<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>   */<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>  @InterfaceAudience.Private<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>  ConfigurationManager getConfigurationManager() {<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    return configurationManager;<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>  }<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span><a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  /**<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span>   * @return Return table descriptors implementation.<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>   */<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>  public TableDescriptors getTableDescriptors() {<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>    return this.tableDescriptors;<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span>  }<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span><a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  /**<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>   * Reload the configuration from disk.<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>   */<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>  void updateConfiguration() {<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>    // Reload the configuration from disk.<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>    conf.reloadConfiguration();<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    configurationManager.notifyAllObservers(conf);<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>  }<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span><a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>    long evictedBlocks = 0;<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span><a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>    for(Store store : region.getStores()) {<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>      }<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>    }<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span><a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>    return CacheEvictionStats.builder()<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span>        .build();<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>  }<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span><a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>  @Override<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>  public double getCompactionPressure() {<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    double max = 0;<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>    for (Region region : onlineRegions.values()) {<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>      for (Store store : region.getStores()) {<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>        double normCount = store.getCompactionPressure();<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>        if (normCount &gt; max) {<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>          max = normCount;<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>        }<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>      }<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>    }<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>    return max;<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>  }<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span><a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>  @Override<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>    return hMemManager;<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>  }<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span><a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>  public MemStoreFlusher getMemStoreFlusher() {<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>    return cacheFlusher;<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>  }<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span><a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>  /**<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>   * For testing<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>   */<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>  @InterfaceAudience.Private<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>  public boolean walRollRequestFinished() {<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>    return this.walRoller.walRollFinished();<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>  }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>  @Override<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>  public ThroughputController getFlushThroughputController() {<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>    return flushThroughputController;<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>  }<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span><a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>  @Override<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>  public double getFlushPressure() {<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>      // return 0 during RS initialization<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>      return 0.0;<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>    }<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span><a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>  @Override<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>    ThroughputController old = this.flushThroughputController;<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span>    if (old != null) {<a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>      old.stop("configuration change");<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    }<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>    try {<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>      Superusers.initialize(newConf);<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>    } catch (IOException e) {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>    }<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>  }<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span><a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>  @Override<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>  public MetricsRegionServer getMetrics() {<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>    return metricsRegionServer;<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>  }<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span><a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>  @Override<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>    return this.secureBulkLoadManager;<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>  }<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span><a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>  @Override<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>      final Abortable abort) {<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>    final LockServiceClient client =<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>  }<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span><a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>  @Override<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>  }<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span><a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>  @Override<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>    return this.rsSpaceQuotaManager;<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>  }<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span><a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>  @Override<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>      return false;<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>    }<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>      // the current server could be stopping.<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>      return false;<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    }<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>    try {<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>      rss.reportFileArchival(null, request);<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>    } catch (ServiceException se) {<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>        if (LOG.isTraceEnabled()) {<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>              + " This will be retried.", ioe);<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>        }<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>        return false;<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>      }<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span>      if (rssStub == rss) {<a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>        rssStub = null;<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>      }<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>      // re-create the stub if we failed to report the archival<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span>      createRegionServerStatusStub(true);<a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>      return false;<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>    }<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>    return true;<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span>  }<a name="line.3868"></a>
-<span class="sourceLineNo">3869</span><a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span>    return eventLoopGroupConfig;<a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>  }<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span><a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>  @Override<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>  }<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span><a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>  }<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span><a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>    procedureResultReporter.complete(procId, error);<a name="line.3885"></a>
-<span class="sourceLineNo">3886</span>  }<a name="line.3886"></a>
-<span class="sourceLineNo">3887</span><a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>    for (;;) {<a name="line.3891"></a>
-<span class="sourceLineNo">3892</span>      rss = rssStub;<a name="line.3892"></a>
-<span class="sourceLineNo">3893</span>      if (rss != null) {<a name="line.3893"></a>
-<span class="sourceLineNo">3894</span>        break;<a name="line.3894"></a>
-<span class="sourceLineNo">3895</span>      }<a name="line.3895"></a>
-<span class="sourceLineNo">3896</span>      createRegionServerStatusStub();<a name="line.3896"></a>
-<span class="sourceLineNo">3897</span>    }<a name="line.3897"></a>
-<span class="sourceLineNo">3898</span>    try {<a name="line.3898"></a>
-<span class="sourceLineNo">3899</span>      rss.reportProcedureDone(null, request);<a name="line.3899"></a>
-<span class="sourceLineNo">3900</span>    } catch (ServiceException se) {<a name="line.3900"></a>
-<span class="sourceLineNo">3901</span>      if (rssStub == rss) {<a name="line.3901"></a>
-<span class="sourceLineNo">3902</span>        rssStub = null;<a name="line.3902"></a>
-<span class="sourceLineNo">3903</span>      }<a name="line.3903"></a>
-<span class="sourceLineNo">3904</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3904"></a>
-<span class="sourceLineNo">3905</span>    }<a name="line.3905"></a>
-<span class="sourceLineNo">3906</span>  }<a name="line.3906"></a>
-<span class="sourceLineNo">3907</span><a name="line.3907"></a>
-<span class="sourceLineNo">3908</span>  /**<a name="line.3908"></a>
-<span class="sourceLineNo">3909</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3909"></a>
-<span class="sourceLineNo">3910</span>   *<a name="line.3910"></a>
-<span class="sourceLineNo">3911</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3911"></a>
-<span class="sourceLineNo">3912</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3912"></a>
-<span class="sourceLineNo">3913</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3913"></a>
-<span class="sourceLineNo">3914</span>   *<a name="line.3914"></a>
-<span class="sourceLineNo">3915</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3915"></a>
-<span class="sourceLineNo">3916</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3916"></a>
-<span class="sourceLineNo">3917</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3917"></a>
-<span class="sourceLineNo">3918</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3918"></a>
-<span class="sourceLineNo">3919</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3919"></a>
-<span class="sourceLineNo">3920</span>   *<a name="line.3920"></a>
-<span class="sourceLineNo">3921</span>   * See HBASE-22404 for more details.<a name="line.3921"></a>
-<span class="sourceLineNo">3922</span>   *<a name="line.3922"></a>
-<span class="sourceLineNo">3923</span>   * @param procId the id of the open/close region procedure<a name="line.3923"></a>
-<span class="sourceLineNo">3924</span>   * @return true if the procedure can be submitted.<a name="line.3924"></a>
-<span class="sourceLineNo">3925</span>   */<a name="line.3925"></a>
-<span class="sourceLineNo">3926</span>  boolean submitRegionProcedure(long procId) {<a name="line.3926"></a>
-<span class="sourceLineNo">3927</span>    if (procId == -1) {<a name="line.3927"></a>
-<span class="sourceLineNo">3928</span>      return true;<a name="line.3928"></a>
-<span class="sourceLineNo">3929</span>    }<a name="line.3929"></a>
-<span class="sourceLineNo">3930</span>    // Ignore the region procedures which already submitted.<a name="line.3930"></a>
-<span class="sourceLineNo">3931</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3931"></a>
-<span class="sourceLineNo">3932</span>    if (previous != null) {<a name="line.3932"></a>
-<span class="sourceLineNo">3933</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3933"></a>
-<span class="sourceLineNo">3934</span>      return false;<a name="line.3934"></a>
-<span class="sourceLineNo">3935</span>    }<a name="line.3935"></a>
-<span class="sourceLineNo">3936</span>    // Ignore the region procedures which already executed.<a name="line.3936"></a>
-<span class="sourceLineNo">3937</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3937"></a>
-<span class="sourceLineNo">3938</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3938"></a>
-<span class="sourceLineNo">3939</span>      return false;<a name="line.3939"></a>
-<span class="sourceLineNo">3940</span>    }<a name="line.3940"></a>
-<span class="sourceLineNo">3941</span>    return true;<a name="line.3941"></a>
-<span class="sourceLineNo">3942</span>  }<a name="line.3942"></a>
-<span class="sourceLineNo">3943</span><a name="line.3943"></a>
-<span class="sourceLineNo">3944</span>  /**<a name="line.3944"></a>
-<span class="sourceLineNo">3945</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3945"></a>
-<span class="sourceLineNo">3946</span>   * @param procId the id of the open/close region procedure<a name="line.3946"></a>
-<span class="sourceLineNo">3947</span>   */<a name="line.3947"></a>
-<span class="sourceLineNo">3948</span>  public void finishRegionProcedure(long procId) {<a name="line.3948"></a>
-<span class="sourceLineNo">3949</span>    executedRegionProcedures.put(procId, procId);<a name="line.3949"></a>
-<span class="sourceLineNo">3950</span>    submittedRegionProcedures.remove(procId);<a name="line.3950"></a>
-<span class="sourceLineNo">3951</span>  }<a name="line.3951"></a>
-<span class="sourceLineNo">3952</span><a name="line.3952"></a>
-<span class="sourceLineNo">3953</span>  public boolean isShutDown() {<a name="line.3953"></a>
-<span class="sourceLineNo">3954</span>    return shutDown;<a name="line.3954"></a>
-<span class="sourceLineNo">3955</span>  }<a name="line.3955"></a>
-<span class="sourceLineNo">3956</span><a name="line.3956"></a>
-<span class="sourceLineNo">3957</span>  /**<a name="line.3957"></a>
-<span class="sourceLineNo">3958</span>   * Force to terminate region server when abort timeout.<a name="line.3958"></a>
-<span class="sourceLineNo">3959</span>   */<a name="line.3959"></a>
-<span class="sourceLineNo">3960</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3960"></a>
-<span class="sourceLineNo">3961</span><a name="line.3961"></a>
-<span class="sourceLineNo">3962</span>    public SystemExitWhenAbortTimeout() {<a name="line.3962"></a>
-<span class="sourceLineNo">3963</span>    }<a name="line.3963"></a>
-<span class="sourceLineNo">3964</span><a name="line.3964"></a>
-<span class="sourceLineNo">3965</span>    @Override<a name="line.3965"></a>
-<span class="sourceLineNo">3966</span>    public void run() {<a name="line.3966"></a>
-<span class="sourceLineNo">3967</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3967"></a>
-<span class="sourceLineNo">3968</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3968"></a>
-<span class="sourceLineNo">3969</span>          " Thread dump to stdout.");<a name="line.3969"></a>
-<span class="sourceLineNo">3970</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3970"></a>
-<span class="sourceLineNo">3971</span>      Runtime.getRuntime().halt(1);<a name="line.3971"></a>
-<span class="sourceLineNo">3972</span>    }<a name="line.3972"></a>
-<span class="sourceLineNo">3973</span>  }<a name="line.3973"></a>
-<span class="sourceLineNo">3974</span><a name="line.3974"></a>
-<span class="sourceLineNo">3975</span>  @Override<a name="line.3975"></a>
-<span class="sourceLineNo">3976</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3976"></a>
-<span class="sourceLineNo">3977</span>    return asyncClusterConnection;<a name="line.3977"></a>
-<span class="sourceLineNo">3978</span>  }<a name="line.3978"></a>
-<span class="sourceLineNo">3979</span><a name="line.3979"></a>
-<span class="sourceLineNo">3980</span>  @InterfaceAudience.Private<a name="line.3980"></a>
-<span class="sourceLineNo">3981</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3981"></a>
-<span class="sourceLineNo">3982</span>    return compactedFileDischarger;<a name="line.3982"></a>
-<span class="sourceLineNo">3983</span>  }<a name="line.3983"></a>
-<span class="sourceLineNo">3984</span><a name="line.3984"></a>
-<span class="sourceLineNo">3985</span>  /**<a name="line.3985"></a>
-<span class="sourceLineNo">3986</span>   * Return pause time configured in {@link HConstants#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME}}<a name="line.3986"></a>
-<span class="sourceLineNo">3987</span>   * @return pause time<a name="line.3987"></a>
-<span class="sourceLineNo">3988</span>   */<a name="line.3988"></a>
-<span class="sourceLineNo">3989</span>  @InterfaceAudience.Private<a name="line.3989"></a>
-<span class="sourceLineNo">3990</span>  public long getRetryPauseTime() {<a name="line.3990"></a>
-<span class="sourceLineNo">3991</span>    return this.retryPauseTime;<a name="line.3991"></a>
-<span class="sourceLineNo">3992</span>  }<a name="line.3992"></a>
-<span class="sourceLineNo">3993</span><a name="line.3993"></a>
-<span class="sourceLineNo">3994</span>  @Override<a name="line.3994"></a>
-<span class="sourceLineNo">3995</span>  public Optional&lt;ServerName&gt; getActiveMaster() {<a name="line.3995"></a>
-<span class="sourceLineNo">3996</span>    return Optional.ofNullable(masterAddressTracker.getMasterAddress());<a name="line.3996"></a>
-<span class="sourceLineNo">3997</span>  }<a name="line.3997"></a>
-<span class="sourceLineNo">3998</span><a name="line.3998"></a>
-<span class="sourceLineNo">3999</span>  @Override<a name="line.3999"></a>
-<span class="sourceLineNo">4000</span>  public List&lt;ServerName&gt; getBackupMasters() {<a name="line.4000"></a>
-<span class="sourceLineNo">4001</span>    return masterAddressTracker.getBackupMasters();<a name="line.4001"></a>
-<span class="sourceLineNo">4002</span>  }<a name="line.4002"></a>
-<span class="sourceLineNo">4003</span><a name="line.4003"></a>
-<span class="sourceLineNo">4004</span>  @Override<a name="line.4004"></a>
-<span class="sourceLineNo">4005</span>  public List&lt;ServerName&gt; getRegionServers() {<a name="line.4005"></a>
-<span class="sourceLineNo">4006</span>    return regionServerAddressTracker.getRegionServers();<a name="line.4006"></a>
-<span class="sourceLineNo">4007</span>  }<a name="line.4007"></a>
-<span class="sourceLineNo">4008</span><a name="line.4008"></a>
-<span class="sourceLineNo">4009</span>  @Override<a name="line.4009"></a>
-<span class="sourceLineNo">4010</span>  public List&lt;HRegionLocation&gt; getMetaLocations() {<a name="line.4010"></a>
-<span class="sourceLineNo">4011</span>    return metaRegionLocationCache.getMetaRegionLocations();<a name="line.4011"></a>
-<span class="sourceLineNo">4012</span>  }<a name="line.4012"></a>
-<span class="sourceLineNo">4013</span><a name="line.4013"></a>
-<span class="sourceLineNo">4014</span>  @RestrictedApi(explanation = "Should only be called in tests", link = "",<a name="line.4014"></a>
-<span class="sourceLineNo">4015</span>    allowedOnPath = ".*/src/test/.*")<a name="line.4015"></a>
-<span class="sourceLineNo">4016</span>  public MetaRegionLocationCache getMetaRegionLocationCache() {<a name="line.4016"></a>
-<span class="sourceLineNo">4017</span>    return metaRegionLocationCache;<a name="line.4017"></a>
-<span class="sourceLineNo">4018</span>  }<a name="line.4018"></a>
-<span class="sourceLineNo">4019</span>}<a name="line.4019"></a>
+<span class="sourceLineNo">3626</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>    try {<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>      String serviceName = call.getServiceName();<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>      if (service == null) {<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>            serviceName);<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>      }<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>      ServiceDescriptor serviceDesc =<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>          service.getDescriptorForType();<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span><a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>      String methodName = call.getMethodName();<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>      MethodDescriptor methodDesc =<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>          serviceDesc.findMethodByName(methodName);<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>      if (methodDesc == null) {<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>            " called on executorService " + serviceName);<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span><a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>      Message request =<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>      final Message.Builder responseBuilder =<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>        if (message != null) {<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>          responseBuilder.mergeFrom(message);<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>        }<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>      });<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>      if (exception != null) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>        throw exception;<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>      }<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    } catch (IOException ie) {<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>      throw new ServiceException(ie);<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>    }<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>  }<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span><a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>  /**<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>   * May be null if this is a master which not carry table.<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>   *<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>   * @return The block cache instance used by the regionserver.<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>   */<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>  @Override<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>    return Optional.ofNullable(this.blockCache);<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span><a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>  /**<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>   * May be null if this is a master which not carry table.<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>   *<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>   * @return The cache for mob files used by the regionserver.<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>   */<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>  @Override<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>  }<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span><a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>  @Override<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>  public AccessChecker getAccessChecker() {<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    return rpcServices.getAccessChecker();<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  @Override<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>  }<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span><a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  /**<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>   */<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>  @InterfaceAudience.Private<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  ConfigurationManager getConfigurationManager() {<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>    return configurationManager;<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>  }<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span><a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>  /**<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>   * @return Return table descriptors implementation.<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>   */<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>  @Override<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>  public TableDescriptors getTableDescriptors() {<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>    return this.tableDescriptors;<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>  }<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span><a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  /**<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span>   * Reload the configuration from disk.<a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>   */<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  void updateConfiguration() {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    // Reload the configuration from disk.<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>    conf.reloadConfiguration();<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>    configurationManager.notifyAllObservers(conf);<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>  }<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span><a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    long evictedBlocks = 0;<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span><a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    for(Store store : region.getStores()) {<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>      }<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>    }<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span><a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>    return CacheEvictionStats.builder()<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>        .build();<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>  }<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span><a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>  @Override<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span>  public double getCompactionPressure() {<a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>    double max = 0;<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>    for (Region region : onlineRegions.values()) {<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>      for (Store store : region.getStores()) {<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>        double normCount = store.getCompactionPressure();<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>        if (normCount &gt; max) {<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>          max = normCount;<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>        }<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>      }<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>    }<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>    return max;<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>  }<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span><a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>  @Override<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>    return hMemManager;<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>  }<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span><a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>  public MemStoreFlusher getMemStoreFlusher() {<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>    return cacheFlusher;<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>  }<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span><a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>  /**<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>   * For testing<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>   */<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>  @InterfaceAudience.Private<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>  public boolean walRollRequestFinished() {<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    return this.walRoller.walRollFinished();<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>  }<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span><a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>  @Override<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>  public ThroughputController getFlushThroughputController() {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>    return flushThroughputController;<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>  }<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span><a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>  @Override<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>  public double getFlushPressure() {<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>      // return 0 during RS initialization<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>      return 0.0;<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>    }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>  }<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span><a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>  @Override<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>    ThroughputController old = this.flushThroughputController;<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>    if (old != null) {<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>      old.stop("configuration change");<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    }<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span>    try {<a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>      Superusers.initialize(newConf);<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>    } catch (IOException e) {<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span>    }<a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  }<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span><a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>  @Override<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>  public MetricsRegionServer getMetrics() {<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>    return metricsRegionServer;<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span>  }<a name="line.3801"></a>
+<span class="sourceLineNo">3802</span><a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>  @Override<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span>    return this.secureBulkLoadManager;<a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>  }<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span><a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>  @Override<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>      final Abortable abort) {<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>    final LockServiceClient client =<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>  }<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span><a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>  @Override<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>  }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span><a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>  @Override<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>    return this.rsSpaceQuotaManager;<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>  }<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span><a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>  @Override<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>      return false;<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>    }<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>      // the current server could be stopping.<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>      return false;<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>    }<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>    try {<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>      rss.reportFileArchival(null, request);<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>    } catch (ServiceException se) {<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>        if (LOG.isTraceEnabled()) {<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>              + " This will be retried.", ioe);<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>        }<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>        return false;<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>      }<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>      if (rssStub == rss) {<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>        rssStub = null;<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>      }<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>      // re-create the stub if we failed to report the archival<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span>      createRegionServerStatusStub(true);<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>      return false;<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>    }<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>    return true;<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>  }<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span><a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>    return eventLoopGroupConfig;<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span>  }<a name="line.3865"></a>
+<span class="sourceLineNo">3866</span><a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>  @Override<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>  }<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span><a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>  }<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span><a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span>    procedureResultReporter.complete(procId, error);<a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  }<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span><a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>    for (;;) {<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>      rss = rssStub;<a name="line.3885"></a>
+<span class="sourceLineNo">3886</span>      if (rss != null) {<a name="line.3886"></a>
+<span class="sourceLineNo">3887</span>        break;<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>      }<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>      createRegionServerStatusStub();<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>    }<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>    try {<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>      rss.reportProcedureDone(null, request);<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>    } catch (ServiceException se) {<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>      if (rssStub == rss) {<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>        rssStub = null;<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span>      }<a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>    }<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span>  }<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span><a name="line.3900"></a>
+<span class="sourceLineNo">3901</span>  /**<a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>   *<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3906"></a>
+<span class="sourceLineNo">3907</span>   *<a name="line.3907"></a>
+<span class="sourceLineNo">3908</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3908"></a>
+<span class="sourceLineNo">3909</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3909"></a>
+<span class="sourceLineNo">3910</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3910"></a>
+<span class="sourceLineNo">3911</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3911"></a>
+<span class="sourceLineNo">3912</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3912"></a>
+<span class="sourceLineNo">3913</span>   *<a name="line.3913"></a>
+<span class="sourceLineNo">3914</span>   * See HBASE-22404 for more details.<a name="line.3914"></a>
+<span class="sourceLineNo">3915</span>   *<a name="line.3915"></a>
+<span class="sourceLineNo">3916</span>   * @param procId the id of the open/close region procedure<a name="line.3916"></a>
+<span class="sourceLineNo">3917</span>   * @return true if the procedure can be submitted.<a name="line.3917"></a>
+<span class="sourceLineNo">3918</span>   */<a name="line.3918"></a>
+<span class="sourceLineNo">3919</span>  boolean submitRegionProcedure(long procId) {<a name="line.3919"></a>
+<span class="sourceLineNo">3920</span>    if (procId == -1) {<a name="line.3920"></a>
+<span class="sourceLineNo">3921</span>      return true;<a name="line.3921"></a>
+<span class="sourceLineNo">3922</span>    }<a name="line.3922"></a>
+<span class="sourceLineNo">3923</span>    // Ignore the region procedures which already submitted.<a name="line.3923"></a>
+<span class="sourceLineNo">3924</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3924"></a>
+<span class="sourceLineNo">3925</span>    if (previous != null) {<a name="line.3925"></a>
+<span class="sourceLineNo">3926</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3926"></a>
+<span class="sourceLineNo">3927</span>      return false;<a name="line.3927"></a>
+<span class="sourceLineNo">3928</span>    }<a name="line.3928"></a>
+<span class="sourceLineNo">3929</span>    // Ignore the region procedures which already executed.<a name="line.3929"></a>
+<span class="sourceLineNo">3930</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3930"></a>
+<span class="sourceLineNo">3931</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3931"></a>
+<span class="sourceLineNo">3932</span>      return false;<a name="line.3932"></a>
+<span class="sourceLineNo">3933</span>    }<a name="line.3933"></a>
+<span class="sourceLineNo">3934</span>    return true;<a name="line.3934"></a>
+<span class="sourceLineNo">3935</span>  }<a name="line.3935"></a>
+<span class="sourceLineNo">3936</span><a name="line.3936"></a>
+<span class="sourceLineNo">3937</span>  /**<a name="line.3937"></a>
+<span class="sourceLineNo">3938</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3938"></a>
+<span class="sourceLineNo">3939</span>   * @param procId the id of the open/close region procedure<a name="line.3939"></a>
+<span class="sourceLineNo">3940</span>   */<a name="line.3940"></a>
+<span class="sourceLineNo">3941</span>  public void finishRegionProcedure(long procId) {<a name="line.3941"></a>
+<span class="sourceLineNo">3942</span>    executedRegionProcedures.put(procId, procId);<a name="line.3942"></a>
+<span class="sourceLineNo">3943</span>    submittedRegionProcedures.remove(procId);<a name="line.3943"></a>
+<span class="sourceLineNo">3944</span>  }<a name="line.3944"></a>
+<span class="sourceLineNo">3945</span><a name="line.3945"></a>
+<span class="sourceLineNo">3946</span>  public boolean isShutDown() {<a name="line.3946"></a>
+<span class="sourceLineNo">3947</span>    return shutDown;<a name="line.3947"></a>
+<span class="sourceLineNo">3948</span>  }<a name="line.3948"></a>
+<span class="sourceLineNo">3949</span><a name="line.3949"></a>
+<span class="sourceLineNo">3950</span>  /**<a name="line.3950"></a>
+<span class="sourceLineNo">3951</span>   * Force to terminate region server when abort timeout.<a name="line.3951"></a>
+<span class="sourceLineNo">3952</span>   */<a name="line.3952"></a>
+<span class="sourceLineNo">3953</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3953"></a>
+<span class="sourceLineNo">3954</span><a name="line.3954"></a>
+<span class="sourceLineNo">3955</span>    public SystemExitWhenAbortTimeout() {<a name="line.3955"></a>
+<span class="sourceLineNo">3956</span>    }<a name="line.3956"></a>
+<span class="sourceLineNo">3957</span><a name="line.3957"></a>
+<span class="sourceLineNo">3958</span>    @Override<a name="line.3958"></a>
+<span class="sourceLineNo">3959</span>    public void run() {<a name="line.3959"></a>
+<span class="sourceLineNo">3960</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3960"></a>
+<span class="sourceLineNo">3961</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3961"></a>
+<span class="sourceLineNo">3962</span>          " Thread dump to stdout.");<a name="line.3962"></a>
+<span class="sourceLineNo">3963</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3963"></a>
+<span class="sourceLineNo">3964</span>      Runtime.getRuntime().halt(1);<a name="line.3964"></a>
+<span class="sourceLineNo">3965</span>    }<a name="line.3965"></a>
+<span class="sourceLineNo">3966</span>  }<a name="line.3966"></a>
+<span class="sourceLineNo">3967</span><a name="line.3967"></a>
+<span class="sourceLineNo">3968</span>  @Override<a name="line.3968"></a>
+<span class="sourceLineNo">3969</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3969"></a>
+<span class="sourceLineNo">3970</span>    return asyncClusterConnection;<a name="line.3970"></a>
+<span class="sourceLineNo">3971</span>  }<a name="line.3971"></a>
+<span class="sourceLineNo">3972</span><a name="line.3972"></a>
+<span class="sourceLineNo">3973</span>  @InterfaceAudience.Private<a name="line.3973"></a>
+<span class="sourceLineNo">3974</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3974"></a>
+<span class="sourceLineNo">3975</span>    return compactedFileDischarger;<a name="line.3975"></a>
+<span class="sourceLineNo">3976</span>  }<a name="line.3976"></a>
+<span class="sourceLineNo">3977</span><a name="line.3977"></a>
+<span class="sourceLineNo">3978</span>  /**<a name="line.3978"></a>
+<span class="sourceLineNo">3979</span>   * Return pause time configured in {@link HConstants#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME}}<a name="line.3979"></a>
+<span class="sourceLineNo">3980</span>   * @return pause time<a name="line.3980"></a>
+<span class="sourceLineNo">3981</span>   */<a name="line.3981"></a>
+<span class="sourceLineNo">3982</span>  @InterfaceAudience.Private<a name="line.3982"></a>
+<span class="sourceLineNo">3983</span>  public long getRetryPauseTime() {<a name="line.3983"></a>
+<span class="sourceLineNo">3984</span>    return this.retryPauseTime;<a name="line.3984"></a>
+<span class="sourceLineNo">3985</span>  }<a name="line.3985"></a>
+<span class="sourceLineNo">3986</span><a name="line.3986"></a>
+<span class="sourceLineNo">3987</span>  @Override<a name="line.3987"></a>
+<span class="sourceLineNo">3988</span>  public Optional&lt;ServerName&gt; getActiveMaster() {<a name="line.3988"></a>
+<span class="sourceLineNo">3989</span>    return Optional.ofNullable(masterAddressTracker.getMasterAddress());<a name="line.3989"></a>
+<span class="sourceLineNo">3990</span>  }<a name="line.3990"></a>
+<span class="sourceLineNo">3991</span><a name="line.3991"></a>
+<span class="sourceLineNo">3992</span>  @Override<a name="line.3992"></a>
+<span class="sourceLineNo">3993</span>  public List&lt;ServerName&gt; getBackupMasters() {<a name="line.3993"></a>
+<span class="sourceLineNo">3994</span>    return masterAddressTracker.getBackupMasters();<a name="line.3994"></a>
+<span class="sourceLineNo">3995</span>  }<a name="line.3995"></a>
+<span class="sourceLineNo">3996</span><a name="line.3996"></a>
+<span class="sourceLineNo">3997</span>  @Override<a name="line.3997"></a>
+<span class="sourceLineNo">3998</span>  public List&lt;ServerName&gt; getRegionServers() {<a name="line.3998"></a>
+<span class="sourceLineNo">3999</span>    return regionServerAddressTracker.getRegionServers();<a name="line.3999"></a>
+<span class="sourceLineNo">4000</span>  }<a name="line.4000"></a>
+<span class="sourceLineNo">4001</span><a name="line.4001"></a>
+<span class="sourceLineNo">4002</span>  @Override<a name="line.4002"></a>
+<span class="sourceLineNo">4003</span>  public List&lt;HRegionLocation&gt; getMetaLocations() {<a name="line.4003"></a>
+<span class="sourceLineNo">4004</span>    return metaRegionLocationCache.getMetaRegionLocations();<a name="line.4004"></a>
+<span class="sourceLineNo">4005</span>  }<a name="line.4005"></a>
+<span class="sourceLineNo">4006</span><a name="line.4006"></a>
+<span class="sourceLineNo">4007</span>  @RestrictedApi(explanation = "Should only be called in tests", link = "",<a name="line.4007"></a>
+<span class="sourceLineNo">4008</span>    allowedOnPath = ".*/src/test/.*")<a name="line.4008"></a>
+<span class="sourceLineNo">4009</span>  public MetaRegionLocationCache getMetaRegionLocationCache() {<a name="line.4009"></a>
+<span class="sourceLineNo">4010</span>    return metaRegionLocationCache;<a name="line.4010"></a>
+<span class="sourceLineNo">4011</span>  }<a name="line.4011"></a>
+<span class="sourceLineNo">4012</span>}<a name="line.4012"></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 566d77a..f768f6a 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
@@ -2644,1387 +2644,1380 @@
 <span class="sourceLineNo">2636</span>    return abortRequested.compareAndSet(false, true);<a name="line.2636"></a>
 <span class="sourceLineNo">2637</span>  }<a name="line.2637"></a>
 <span class="sourceLineNo">2638</span><a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  /**<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>   */<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>  public void abort(String reason) {<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>    abort(reason, null);<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>  }<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span><a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>  @Override<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>  public boolean isAborted() {<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>    return abortRequested.get();<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>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>   * hostname+port immediately.<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   */<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>  @InterfaceAudience.Private<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  protected void kill() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    this.killed = true;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>    abort("Simulated kill");<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>  }<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span><a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>  // Limits the time spent in the shutdown process.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>  private void scheduleAbortTimer() {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>    if (this.abortMonitor == null) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>      TimerTask abortTimeoutTask = null;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      try {<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        timerTaskCtor.setAccessible(true);<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      } catch (Exception e) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      }<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (abortTimeoutTask != null) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>      }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>    }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>  }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected final void shutdownChore(ScheduledChore chore) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (chore != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      chore.shutdown();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>  }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>   * have already been called.<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>   */<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>  protected void stopServiceThreads() {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>    // clean up the scheduled chores<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>    if (this.choreService != null) {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      shutdownChore(nonceManagerChore);<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      shutdownChore(compactionChecker);<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      shutdownChore(periodicFlusher);<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>      shutdownChore(healthCheckChore);<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      shutdownChore(executorStatusChore);<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>      shutdownChore(storefileRefresher);<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      shutdownChore(fsUtilizationChore);<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      shutdownChore(slowLogTableOpsChore);<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>      // cancel the remaining scheduled chores (in case we missed out any)<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>      // TODO: cancel will not cleanup the chores, so we need make sure we do not miss any<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      choreService.shutdown();<a name="line.2704"></a>
+<span class="sourceLineNo">2639</span>  @Override<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>  public boolean isAborted() {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    return abortRequested.get();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>  }<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span><a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>  /*<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>   * hostname+port immediately.<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>  @InterfaceAudience.Private<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>  protected void kill() {<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>    this.killed = true;<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>    abort("Simulated kill");<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>  }<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>  // Limits the time spent in the shutdown process.<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  private void scheduleAbortTimer() {<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span>    if (this.abortMonitor == null) {<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>      TimerTask abortTimeoutTask = null;<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>      try {<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>        timerTaskCtor.setAccessible(true);<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      } catch (Exception e) {<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>      }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>      if (abortTimeoutTask != null) {<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>      }<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    }<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>  }<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span><a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>  protected final void shutdownChore(ScheduledChore chore) {<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>    if (chore != null) {<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>      chore.shutdown();<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>    }<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>  }<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>  /**<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>   * have already been called.<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>   */<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>  protected void stopServiceThreads() {<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>    // clean up the scheduled chores<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    if (this.choreService != null) {<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>      shutdownChore(nonceManagerChore);<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>      shutdownChore(compactionChecker);<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>      shutdownChore(periodicFlusher);<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>      shutdownChore(healthCheckChore);<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>      shutdownChore(executorStatusChore);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>      shutdownChore(storefileRefresher);<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>      shutdownChore(fsUtilizationChore);<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>      shutdownChore(slowLogTableOpsChore);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>      // cancel the remaining scheduled chores (in case we missed out any)<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>      // TODO: cancel will not cleanup the chores, so we need make sure we do not miss any<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      choreService.shutdown();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span><a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    if (this.cacheFlusher != null) {<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>      this.cacheFlusher.join();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    }<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    if (this.walRoller != null) {<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      this.walRoller.close();<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>    if (this.cacheFlusher != null) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>      this.cacheFlusher.join();<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>    }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>    if (this.walRoller != null) {<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>      this.walRoller.close();<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>    }<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>    if (this.compactSplitThread != null) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>      this.compactSplitThread.join();<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>    }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>    if (this.executorService != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      this.executorService.shutdown();<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>    }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>    } else {<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>      if (this.replicationSourceHandler != null) {<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      }<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>      if (this.replicationSinkHandler != null) {<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>      }<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>    }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>  }<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span><a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>  /**<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>   * @return Return the object that implements the replication<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>   * source executorService.<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>   */<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>  @Override<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    return replicationSourceHandler;<a name="line.2737"></a>
+<span class="sourceLineNo">2706</span>    if (this.compactSplitThread != null) {<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>      this.compactSplitThread.join();<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>    }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    if (this.executorService != null) {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      this.executorService.shutdown();<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>    }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>    } else {<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>      if (this.replicationSourceHandler != null) {<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>      }<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>      if (this.replicationSinkHandler != null) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>      }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>    }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>  }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>  /**<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>   * @return Return the object that implements the replication<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>   * source executorService.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>   */<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>  @Override<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>    return replicationSourceHandler;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>  }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span><a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>  /**<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>   */<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    return replicationSinkHandler;<a name="line.2737"></a>
 <span class="sourceLineNo">2738</span>  }<a name="line.2738"></a>
 <span class="sourceLineNo">2739</span><a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>  /**<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>   */<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>    return replicationSinkHandler;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>  }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>  /**<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>   * Method will block until a master is available. You can break from this<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>   * block by requesting the server stop.<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>   *<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return master + port, or null if server has been stopped<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   */<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return createRegionServerStatusStub(false);<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /**<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * You can break from this block by requesting the server stop.<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @return master + port, or null if server has been stopped<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  @InterfaceAudience.Private<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    if (rssStub != null) {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      return masterAddressTracker.getMasterAddress();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    ServerName sn = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    long previousLogTime = 0;<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    boolean interrupted = false;<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    try {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      while (keepLooping()) {<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        if (sn == null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>          if (!keepLooping()) {<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>            // give up with no connection.<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>            return null;<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>          }<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>            LOG.debug("No master found; retry");<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>          if (sleepInterrupted(200)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>            interrupted = true;<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          }<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>          continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        // If we are on the active master, use the shortcut<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          break;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          BlockingRpcChannel channel =<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>              shortOperationTimeout);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>          break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>        } catch (IOException e) {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>            e = e instanceof RemoteException ?<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>            } else {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>            }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>          }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>          if (sleepInterrupted(200)) {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>            interrupted = true;<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>          }<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>        }<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      }<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } finally {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      if (interrupted) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>        Thread.currentThread().interrupt();<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      }<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>    this.rssStub = intRssStub;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>    this.lockStub = intLockStub;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    return sn;<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>  /**<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>   * @return True if we should break loop because cluster is going down or<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>   */<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  private boolean keepLooping() {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  }<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span><a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>  /*<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>   * us by the master.<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   * null if we failed to register.<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>   * @throws IOException<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>   */<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    if (masterServerName == null || rss == null) return null;<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>    RegionServerStartupResponse result = null;<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>    try {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      rpcServices.requestCount.reset();<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>      LOG.info("reportForDuty to master=" + masterServerName + " with isa="<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        + rpcServices.isa + ", startcode=" + this.startcode);<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      int port = rpcServices.isa.getPort();<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      }<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      request.setPort(port);<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      request.setServerStartCode(this.startcode);<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      request.setServerCurrentTime(now);<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>    } catch (ServiceException se) {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>            ioe);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        // Re-throw IOE will cause RS to abort<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>        throw ioe;<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>        LOG.debug("Master is not running yet");<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      } else {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>        LOG.warn("error telling master we are up", se);<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>      }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>      rssStub = null;<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>    }<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return result;<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    try {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>      if (rss == null) { // Try to connect one more time<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>        createRegionServerStatusStub();<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>        rss = rssStub;<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>        if (rss == null) {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>          // Still no luck, we tried<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>              .build();<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>        }<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>      }<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    } catch (ServiceException e) {<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>          .build();<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>    }<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>  }<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span><a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  /**<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>   * Close meta region if we carry it<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>   * @param abort Whether we're running an abort.<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    HRegion meta = null;<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    try {<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>        if (hri.isMetaRegion()) {<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>          meta = e.getValue();<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>        }<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>        if (meta != null) break;<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>      }<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    } finally {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>  }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>  /**<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>   * Schedule closes on all user regions.<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * that are already closed or that are closing.<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   * @param abort Whether we're running an abort.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  private void closeUserRegions(final boolean abort) {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    try {<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>        HRegion r = e.getValue();<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>          // Don't update zk with this close transition; pass false.<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>        }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      }<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>    } finally {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>    }<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span><a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  /** @return the info server */<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  public InfoServer getInfoServer() {<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>    return infoServer;<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>   * @return true if a stop has been requested.<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>   */<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public boolean isStopped() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.stopped;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public boolean isStopping() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return this.stopping;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  @Override<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>  public Configuration getConfiguration() {<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>    return conf;<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  }<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span><a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>    return this.onlineRegions;<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  }<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span><a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>  public int getNumberOfOnlineRegions() {<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>    return this.onlineRegions.size();<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span><a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   * For tests, web ui and metrics.<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>   */<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>    return Collections.unmodifiableCollection(regions);<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span><a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>  @Override<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  public void addRegion(HRegion region) {<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    configurationManager.registerObserver(region);<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>  }<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>      long size) {<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>    if (!sortedRegions.containsKey(size)) {<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>    }<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>    sortedRegions.get(size).add(region);<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  /**<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   *   the biggest.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   */<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>    // we'll sort the regions in reverse<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>    }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>    return sortedRegions;<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>  /**<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>   *   biggest.<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>   */<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>    // we'll sort the regions in reverse<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>    }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>    return sortedRegions;<a name="line.3043"></a>
+<span class="sourceLineNo">2741</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>   * Method will block until a master is available. You can break from this<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>   * block by requesting the server stop.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>   *<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>   * @return master + port, or null if server has been stopped<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>   */<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    return createRegionServerStatusStub(false);<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>  }<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span><a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>  /**<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>   * You can break from this block by requesting the server stop.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>   * @return master + port, or null if server has been stopped<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>   */<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>  @InterfaceAudience.Private<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    if (rssStub != null) {<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      return masterAddressTracker.getMasterAddress();<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    }<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>    ServerName sn = null;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    long previousLogTime = 0;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>    boolean interrupted = false;<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    try {<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>      while (keepLooping()) {<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (sn == null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (!keepLooping()) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            // give up with no connection.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            return null;<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            LOG.debug("No master found; retry");<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>          if (sleepInterrupted(200)) {<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            interrupted = true;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          continue;<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>        }<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span><a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        // If we are on the active master, use the shortcut<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>          break;<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>        }<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        try {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>          BlockingRpcChannel channel =<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>              shortOperationTimeout);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>          break;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>        } catch (IOException e) {<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            e = e instanceof RemoteException ?<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>            } else {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>            }<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>          }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>          if (sleepInterrupted(200)) {<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>            interrupted = true;<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>          }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>        }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>      }<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>    } finally {<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>      if (interrupted) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>        Thread.currentThread().interrupt();<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      }<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>    }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    this.rssStub = intRssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    this.lockStub = intLockStub;<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    return sn;<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span><a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  /**<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   * @return True if we should break loop because cluster is going down or<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>   */<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>  private boolean keepLooping() {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return !this.stopped &amp;&amp; isClusterUp();<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>  /*<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>   * us by the master.<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>   * null if we failed to register.<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>   * @throws IOException<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>   */<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    if (masterServerName == null || rss == null) return null;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>    RegionServerStartupResponse result = null;<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>    try {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>      rpcServices.requestCount.reset();<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>      LOG.info("reportForDuty to master=" + masterServerName + " with isa="<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        + rpcServices.isa + ", startcode=" + this.startcode);<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      int port = rpcServices.isa.getPort();<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>      }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>      request.setPort(port);<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>      request.setServerStartCode(this.startcode);<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>      request.setServerCurrentTime(now);<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>    } catch (ServiceException se) {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>            ioe);<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>        // Re-throw IOE will cause RS to abort<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>        throw ioe;<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        LOG.debug("Master is not running yet");<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>      } else {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>        LOG.warn("error telling master we are up", se);<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>      }<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>      rssStub = null;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    return result;<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>  }<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span><a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>  @Override<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>    try {<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>      if (rss == null) { // Try to connect one more time<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>        createRegionServerStatusStub();<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>        rss = rssStub;<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>        if (rss == null) {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>          // Still no luck, we tried<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>              .build();<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>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    } catch (ServiceException e) {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>          .build();<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>  /**<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>   * Close meta region if we carry it<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>   * @param abort Whether we're running an abort.<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>   */<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    HRegion meta = null;<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    try {<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>        if (hri.isMetaRegion()) {<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>          meta = e.getValue();<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>        }<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>        if (meta != null) break;<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>      }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    } finally {<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    }<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>  }<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span><a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  /**<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>   * Schedule closes on all user regions.<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * that are already closed or that are closing.<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   * @param abort Whether we're running an abort.<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>   */<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>  private void closeUserRegions(final boolean abort) {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>    try {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>        HRegion r = e.getValue();<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>          // Don't update zk with this close transition; pass false.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<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>    } finally {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>  }<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span><a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>  /** @return the info server */<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  public InfoServer getInfoServer() {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>    return infoServer;<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>  }<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span><a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>  /**<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>   * @return true if a stop has been requested.<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>   */<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>  @Override<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>  public boolean isStopped() {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    return this.stopped;<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>  @Override<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>  public boolean isStopping() {<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>    return this.stopping;<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>  }<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span><a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  @Override<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>  public Configuration getConfiguration() {<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    return conf;<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span><a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    return this.onlineRegions;<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>  }<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span><a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>  public int getNumberOfOnlineRegions() {<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>    return this.onlineRegions.size();<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  }<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span><a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  /**<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * For tests, web ui and metrics.<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>   */<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    return Collections.unmodifiableCollection(regions);<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>  }<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span><a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  @Override<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>  public void addRegion(HRegion region) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>    configurationManager.registerObserver(region);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span><a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>      long size) {<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>    if (!sortedRegions.containsKey(size)) {<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>    }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    sortedRegions.get(size).add(region);<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  }<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>  /**<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>   *   the biggest.<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>   */<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    // we'll sort the regions in reverse<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>    }<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>    return sortedRegions;<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span><a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>  /**<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   *   biggest.<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    // we'll sort the regions in reverse<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    }<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>    return sortedRegions;<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>  /**<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>   * @return time stamp in millis of when this region server was started<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   */<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>  public long getStartcode() {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    return this.startcode;<a name="line.3043"></a>
 <span class="sourceLineNo">3044</span>  }<a name="line.3044"></a>
 <span class="sourceLineNo">3045</span><a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  /**<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>   * @return time stamp in millis of when this region server was started<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>   */<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  public long getStartcode() {<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>    return this.startcode;<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span><a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  /** @return reference to FlushRequester */<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public FlushRequester getFlushRequester() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return this.cacheFlusher;<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 CompactionRequester getCompactionRequestor() {<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>    return this.compactSplitThread;<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 LeaseManager getLeaseManager() {<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    return leaseManager;<a name="line.3066"></a>
+<span class="sourceLineNo">3046</span>  /** @return reference to FlushRequester */<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>  @Override<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public FlushRequester getFlushRequester() {<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.cacheFlusher;<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>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public CompactionRequester getCompactionRequestor() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.compactSplitThread;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public LeaseManager getLeaseManager() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return leaseManager;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>   * @return Return the rootDir.<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  protected Path getDataRootDir() {<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>    return dataRootDir;<a name="line.3066"></a>
 <span class="sourceLineNo">3067</span>  }<a name="line.3067"></a>
 <span class="sourceLineNo">3068</span><a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>  /**<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>   * @return Return the rootDir.<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>   */<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>  protected Path getDataRootDir() {<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    return dataRootDir;<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>  }<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span><a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>  @Override<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>  public FileSystem getFileSystem() {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>    return dataFs;<a name="line.3078"></a>
+<span class="sourceLineNo">3069</span>  @Override<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  public FileSystem getFileSystem() {<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    return dataFs;<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  }<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span><a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  /**<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   */<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>  boolean isDataFileSystemOk() {<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    return this.dataFsOk;<a name="line.3078"></a>
 <span class="sourceLineNo">3079</span>  }<a name="line.3079"></a>
 <span class="sourceLineNo">3080</span><a name="line.3080"></a>
 <span class="sourceLineNo">3081</span>  /**<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3082"></a>
+<span class="sourceLineNo">3082</span>   * @return Return the walRootDir.<a name="line.3082"></a>
 <span class="sourceLineNo">3083</span>   */<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>  boolean isDataFileSystemOk() {<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return this.dataFsOk;<a name="line.3085"></a>
+<span class="sourceLineNo">3084</span>  public Path getWALRootDir() {<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    return walRootDir;<a name="line.3085"></a>
 <span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
 <span class="sourceLineNo">3087</span><a name="line.3087"></a>
 <span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * @return Return the walRootDir.<a name="line.3089"></a>
+<span class="sourceLineNo">3089</span>   * @return Return the walFs.<a name="line.3089"></a>
 <span class="sourceLineNo">3090</span>   */<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>  public Path getWALRootDir() {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    return walRootDir;<a name="line.3092"></a>
+<span class="sourceLineNo">3091</span>  public FileSystem getWALFileSystem() {<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>    return walFs;<a name="line.3092"></a>
 <span class="sourceLineNo">3093</span>  }<a name="line.3093"></a>
 <span class="sourceLineNo">3094</span><a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>  /**<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>   * @return Return the walFs.<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>   */<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>  public FileSystem getWALFileSystem() {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    return walFs;<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>  }<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span><a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  @Override<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>  public String toString() {<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>    return getServerName().toString();<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>  }<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span><a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>  @Override<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>  public ZKWatcher getZooKeeper() {<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    return zooKeeper;<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>  }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span><a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>  @Override<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    return csm;<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>  }<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span><a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>  @Override<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  public ServerName getServerName() {<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    return serverName;<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>  }<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span><a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>    return this.rsHost;<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>  @Override<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>    return this.regionsInTransitionInRS;<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>  }<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span><a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>  @Override<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>  public ExecutorService getExecutorService() {<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>    return executorService;<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>  }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>  @Override<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>  public ChoreService getChoreService() {<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>    return choreService;<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>  }<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span><a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>  @Override<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    return rsQuotaManager;<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>  }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>  //<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  // Main program and support routines<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>   * Load the replication executorService objects, if any<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   */<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>    // read in the name of the source replication class from the config file.<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span><a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>    // read in the name of the sink replication class from the config file.<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span><a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    // only one object.<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>      server.sameReplicationSourceAndSink = true;<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    } else {<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      server.sameReplicationSourceAndSink = false;<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><a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>      Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>    try {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>      throw new IOException("Could not find class for " + classname);<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>    }<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    return service;<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>  }<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span><a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    if(!this.isOnline()){<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>      return walGroupsReplicationStatus;<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>    }<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    }<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>    return walGroupsReplicationStatus;<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>  }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span><a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>  /**<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>   */<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>  static HRegionServer constructRegionServer(<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      final Configuration conf<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>  ) {<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>    try {<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>      return c.newInstance(conf);<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    } catch (Exception e) {<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>          + regionServerClass.toString(), e);<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>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>   */<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  public static void main(String[] args) {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>    VersionInfo.logVersion();<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>    @SuppressWarnings("unchecked")<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span><a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Gets the online regions of the specified table.<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * all the ONLINE regions in the table.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * @param tableName table to limit the scope of the query<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   */<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>  @Override<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>     synchronized (this.onlineRegions) {<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>           tableRegions.add(region);<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>     }<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>     return tableRegions;<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>   }<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span><a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>  @Override<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>    List&lt;HRegion&gt; allRegions;<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>    synchronized (this.onlineRegions) {<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      // Return a clone copy of the onlineRegions<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>    }<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>    return allRegions;<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>  }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>  /**<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>   * Gets the online tables in this RS.<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>   * This method looks at the in-memory onlineRegions.<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>   * @return all the online tables in this RS<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>   */<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>    synchronized (this.onlineRegions) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>      }<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>    }<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>    return tables;<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>  }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span><a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>  public String[] getRegionServerCoprocessors() {<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>    try {<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>    } catch (IOException exception) {<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>          "skipping.");<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>    }<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>    for (HRegion region: regions) {<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      try {<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>      } catch (IOException exception) {<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>            "; skipping.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<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>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    return coprocessors.toArray(new String[0]);<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>  }<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span><a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>  /**<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>   * @param region Region to close<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>   */<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    try {<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>            " - ignoring and continuing");<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>      }<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>    } catch (IOException e) {<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>          " - ignoring and continuing", e);<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><a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>  /**<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>   *<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>   * &lt;p&gt;<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>   * &lt;/p&gt;<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>   * &lt;p&gt;<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>   * &lt;/p&gt;<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>   *<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>   * @param encodedName Region to close<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>   * @param abort True if we are aborting<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>   * @return True if closed a region.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>   * @throws NotServingRegionException if the region is not online<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>   */<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>        final ServerName destination)<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      throws NotServingRegionException {<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>    //Check for permissions to close.<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>    // Can be null if we're calling close on a region that's not online<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>      try {<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>      } catch (IOException exp) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>        return false;<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>    // previous can come back 'null' if not in map.<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>        Boolean.FALSE);<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span><a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span>        // We're going to try to do a standard close then.<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>            " Doing a standard close now");<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>        return closeRegion(encodedName, abort, destination);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>      }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>      // Let's get the region from the online region list again<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>      actualRegion = this.getRegion(encodedName);<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>        // The master deletes the znode when it receives this exception.<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>      }<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>    } else if (previous == null) {<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>      return true;<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>    }<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span><a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>    if (actualRegion == null) {<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>      // The master deletes the znode when it receives this exception.<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span>          " is not online, and is not opening.");<a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>    }<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span><a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>    CloseRegionHandler crh;<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>    if (hri.isMetaRegion()) {<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>    } else {<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>    }<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>    this.executorService.submit(crh);<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    return true;<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>  }<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>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>   *         named region is not member of the online regions.<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>   */<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>  }<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span><a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>  @Override<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>    return this.onlineRegions.get(encodedRegionName);<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><a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>  @Override<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>    if (destination != null) {<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>      }<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>      if (selfMove) {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>      }<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>    }<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>    configurationManager.deregisterObserver(r);<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>    return toReturn != null;<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>  }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span><a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>  /**<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>   *<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>   */<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>      throws NotServingRegionException {<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>  }<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span><a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>      throws NotServingRegionException {<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>  }<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span><a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>    throws NotServingRegionException {<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>    if (region == null) {<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>      if (moveInfo != null) {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3471"></a>
+<span class="sourceLineNo">3095</span>  @Override<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>  public String toString() {<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>    return getServerName().toString();<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>  @Override<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>  public ZKWatcher getZooKeeper() {<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>    return zooKeeper;<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>  @Override<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    return csm;<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>  }<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span><a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>  @Override<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>  public ServerName getServerName() {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>    return serverName;<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>  }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span><a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    return this.rsHost;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  }<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>  @Override<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    return this.regionsInTransitionInRS;<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>  }<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span><a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>  @Override<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>  public ExecutorService getExecutorService() {<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>    return executorService;<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  }<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span><a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>  @Override<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>  public ChoreService getChoreService() {<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    return choreService;<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>  }<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span><a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>  @Override<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>    return rsQuotaManager;<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>  }<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span><a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>  //<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>  // Main program and support routines<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>  //<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>  /**<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>   * Load the replication executorService objects, if any<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>   */<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    // read in the name of the source replication class from the config file.<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span><a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>    // read in the name of the sink replication class from the config file.<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span><a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    // only one object.<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>      server.sameReplicationSourceAndSink = true;<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>    } else {<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>      server.sameReplicationSourceAndSink = false;<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>    }<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>  }<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span><a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>      Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>    try {<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>      throw new IOException("Could not find class for " + classname);<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>    }<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>    return service;<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>  }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span><a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>    if(!this.isOnline()){<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>      return walGroupsReplicationStatus;<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    }<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>    }<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>    return walGroupsReplicationStatus;<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>  /**<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>   */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  static HRegionServer constructRegionServer(<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>      final Configuration conf<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>  ) {<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>    try {<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>      return c.newInstance(conf);<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>    } catch (Exception e) {<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>          + regionServerClass.toString(), e);<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    }<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>  }<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span><a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>  /**<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>   */<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>  public static void main(String[] args) {<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>    VersionInfo.logVersion();<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>    @SuppressWarnings("unchecked")<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span><a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>  }<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span><a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>  /**<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>   * Gets the online regions of the specified table.<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>   * all the ONLINE regions in the table.<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>   * @param tableName table to limit the scope of the query<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>   */<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  @Override<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>     synchronized (this.onlineRegions) {<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>           tableRegions.add(region);<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>         }<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>       }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>     }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>     return tableRegions;<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>  @Override<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>    List&lt;HRegion&gt; allRegions;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>    synchronized (this.onlineRegions) {<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>      // Return a clone copy of the onlineRegions<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>    }<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>    return allRegions;<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>  }<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span><a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>  /**<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * Gets the online tables in this RS.<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * This method looks at the in-memory onlineRegions.<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   * @return all the online tables in this RS<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>   */<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>    synchronized (this.onlineRegions) {<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>      }<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    }<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    return tables;<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>  }<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span><a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>  public String[] getRegionServerCoprocessors() {<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>    try {<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>    } catch (IOException exception) {<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span>          "skipping.");<a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    }<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span>    for (HRegion region: regions) {<a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      try {<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>      } catch (IOException exception) {<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>            "; skipping.");<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>      }<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>    }<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>    return coprocessors.toArray(new String[0]);<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>  }<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span><a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>  /**<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>   * @param region Region to close<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>   */<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    try {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>            " - ignoring and continuing");<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>      }<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>    } catch (IOException e) {<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>          " - ignoring and continuing", e);<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>    }<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>  }<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span><a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>  /**<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>   *<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>   * &lt;p&gt;<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>   * &lt;/p&gt;<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span><a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>   * &lt;p&gt;<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>   * &lt;/p&gt;<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>   *<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>   * @param encodedName Region to close<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>   * @param abort True if we are aborting<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>   * @return True if closed a region.<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>   * @throws NotServingRegionException if the region is not online<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>   */<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>        final ServerName destination)<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>      throws NotServingRegionException {<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>    //Check for permissions to close.<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>    // Can be null if we're calling close on a region that's not online<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>      try {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>      } catch (IOException exp) {<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>        return false;<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>      }<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>    }<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span><a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    // previous can come back 'null' if not in map.<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>        Boolean.FALSE);<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span><a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>        // We're going to try to do a standard close then.<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>            " Doing a standard close now");<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>        return closeRegion(encodedName, abort, destination);<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>      // Let's get the region from the online region list again<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>      actualRegion = this.getRegion(encodedName);<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>        // The master deletes the znode when it receives this exception.<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>      }<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>    } else if (previous == null) {<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>      return true;<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>    if (actualRegion == null) {<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      // The master deletes the znode when it receives this exception.<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>          " is not online, and is not opening.");<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>    }<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span><a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    CloseRegionHandler crh;<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    if (hri.isMetaRegion()) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>    } else {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>    }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>    this.executorService.submit(crh);<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>    return true;<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>  }<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span><a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>   /**<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>   *         named region is not member of the online regions.<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>   */<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>    return this.onlineRegions.get(encodedRegionName);<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 HRegion getRegion(final String encodedRegionName) {<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>    return this.onlineRegions.get(encodedRegionName);<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><a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>  @Override<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    if (destination != null) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>      }<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>      if (selfMove) {<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>      }<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>    }<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>    configurationManager.deregisterObserver(r);<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>    return toReturn != null;<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>  }<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span><a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>  /**<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>   *<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>   */<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>      throws NotServingRegionException {<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>  }<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span><a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>      throws NotServingRegionException {<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>  }<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span><a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>    throws NotServingRegionException {<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    if (region == null) {<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>      if (moveInfo != null) {<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>      }<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      String regionNameStr = regionName == null?<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>          " is opening on " + this.serverName);<a name="line.3471"></a>
 <span class="sourceLineNo">3472</span>      }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>      String regionNameStr = regionName == null?<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>          " is opening on " + this.serverName);<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>      }<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>        " is not online on " + this.serverName);<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>    }<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    return region;<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>  }<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span><a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>  /**<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>   * IOE if it isn't already.<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>   *<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>   * @param t Throwable<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span>   * @param msg Message to log in error. Can be null.<a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>   */<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>    if (t instanceof NotServingRegionException) {<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>      return t;<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>    }<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>    if (msg == null) {<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>      LOG.error("", e);<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>    } else {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>      LOG.error(msg, e);<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>      checkFileSystem();<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    }<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>    return t;<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span><a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
-<span class="sourceLineNo">3513</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.3513"></a>
-<span class="sourceLineNo">3514</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>  }<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span><a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>  /**<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>   * abortRequested and stopRequested<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>   *<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>   * @return false if file system is not available<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>   */<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>  boolean checkFileSystem() {<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>      try {<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>      } catch (IOException e) {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>        abort("File System not available", e);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>        this.dataFsOk = false;<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>      }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>    }<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>    return this.dataFsOk;<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>  }<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span><a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  @Override<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>    Address[] addr = new Address[favoredNodes.size()];<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>    // it is a map of region name to Address[]<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>      addr[i] = Address.fromParts(favoredNodes.get(i).getHostName(),<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>          favoredNodes.get(i).getPort());<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>    }<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>  }<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span><a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>  /**<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>   * comment around {@link #regionFavoredNodesMap} on why we convert to InetSocketAddress[]<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>   * here.<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>   * @param encodedRegionName<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>   * @return array of favored locations<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>   */<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>  @Override<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>    return Address.toSocketAddress(regionFavoredNodesMap.get(encodedRegionName));<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>  @Override<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>  public ServerNonceManager getNonceManager() {<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>    return this.nonceManager;<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>  }<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span><a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>  private static class MovedRegionInfo {<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>    private final ServerName serverName;<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>    private final long seqNum;<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span><a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      this.serverName = serverName;<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      this.seqNum = closeSeqNum;<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>    public ServerName getServerName() {<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>      return serverName;<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>    public long getSeqNum() {<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>      return seqNum;<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>    }<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>  /**<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>   * the number of network calls instead of reducing them.<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>   */<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span><a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>    if (selfMove) {<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>      return;<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>        closeSeqNum);<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>  }<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span><a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>  }<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span><a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>  @InterfaceAudience.Private<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  }<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span><a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>  @InterfaceAudience.Private<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  public int movedRegionCacheExpiredTime() {<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>        return TIMEOUT_REGION_MOVED;<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  }<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span><a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>  private String getMyEphemeralNodePath() {<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  }<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span><a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>  private boolean isHealthCheckerConfigured() {<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3623"></a>
+<span class="sourceLineNo">3473</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>        " is not online on " + this.serverName);<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    }<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>    return region;<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>  /**<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   * IOE if it isn't already.<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   *<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>   * @param t Throwable<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>   * @param msg Message to log in error. Can be null.<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>   */<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>    if (t instanceof NotServingRegionException) {<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>      return t;<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>    }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>    if (msg == null) {<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>      LOG.error("", e);<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    } else {<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>      LOG.error(msg, e);<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>    }<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      checkFileSystem();<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>    }<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>    return t;<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span>  }<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span><a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>  /**<a name="line.3505"></a>
+<span class="sourceLineNo">3506</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.3506"></a>
+<span class="sourceLineNo">3507</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>   */<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  }<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span><a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>  /**<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>   * abortRequested and stopRequested<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>   *<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>   * @return false if file system is not available<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>   */<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>  boolean checkFileSystem() {<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>      try {<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>      } catch (IOException e) {<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>        abort("File System not available", e);<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>        this.dataFsOk = false;<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span>      }<a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>    }<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>    return this.dataFsOk;<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>  @Override<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>    Address[] addr = new Address[favoredNodes.size()];<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>    // it is a map of region name to Address[]<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>      addr[i] = Address.fromParts(favoredNodes.get(i).getHostName(),<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>          favoredNodes.get(i).getPort());<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span>    }<a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>  }<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span><a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>  /**<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>   * comment around {@link #regionFavoredNodesMap} on why we convert to InetSocketAddress[]<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>   * here.<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>   * @param encodedRegionName<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>   * @return array of favored locations<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>   */<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>  @Override<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>    return Address.toSocketAddress(regionFavoredNodesMap.get(encodedRegionName));<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>  @Override<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>  public ServerNonceManager getNonceManager() {<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>    return this.nonceManager;<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>  }<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span><a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>  private static class MovedRegionInfo {<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>    private final ServerName serverName;<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>    private final long seqNum;<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span><a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>      this.serverName = serverName;<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>      this.seqNum = closeSeqNum;<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>     }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span><a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>    public ServerName getServerName() {<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>      return serverName;<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>    }<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span><a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>    public long getSeqNum() {<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>      return seqNum;<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>    }<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>  }<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span><a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>  /**<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>   * the number of network calls instead of reducing them.<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>   */<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span><a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>    if (selfMove) {<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      return;<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>    }<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        closeSeqNum);<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>  }<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span><a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span><a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>  @InterfaceAudience.Private<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<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 int movedRegionCacheExpiredTime() {<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>        return TIMEOUT_REGION_MOVED;<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>  private String getMyEphemeralNodePath() {<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<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>  private boolean isHealthCheckerConfigured() {<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<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>  /**<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>   */<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>  public CompactSplit getCompactSplitThread() {<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>    return this.compactSplitThread;<a name="line.3623"></a>
 <span class="sourceLineNo">3624</span>  }<a name="line.3624"></a>
 <span class="sourceLineNo">3625</span><a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>  /**<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>   */<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  public CompactSplit getCompactSplitThread() {<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>    return this.compactSplitThread;<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  }<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span><a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    try {<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>      String serviceName = call.getServiceName();<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>      if (service == null) {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span>            serviceName);<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>      }<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      ServiceDescriptor serviceDesc =<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>          service.getDescriptorForType();<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span><a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>      String methodName = call.getMethodName();<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span>      MethodDescriptor methodDesc =<a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>          serviceDesc.findMethodByName(methodName);<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>      if (methodDesc == null) {<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>            " called on executorService " + serviceName);<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>      }<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span><a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>      Message request =<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>      final Message.Builder responseBuilder =<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>        if (message != null) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>          responseBuilder.mergeFrom(message);<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      });<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>      if (exception != null) {<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>        throw exception;<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>      }<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>    } catch (IOException ie) {<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>      throw new ServiceException(ie);<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>    }<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>  }<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span><a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>  /**<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>   * May be null if this is a master which not carry table.<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>   *<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>   * @return The block cache instance used by the regionserver.<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>   */<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>  @Override<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>    return Optional.ofNullable(this.blockCache);<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  }<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span><a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  /**<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span>   * May be null if this is a master which not carry table.<a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>   *<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>   * @return The cache for mob files used by the regionserver.<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>   */<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  @Override<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  }<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span><a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>  @Override<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>  public AccessChecker getAccessChecker() {<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    return rpcServices.getAccessChecker();<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>  }<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span><a name="line.3699"></a>
-<span class="sourceLineNo">3700</span>  @Override<a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>  }<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span><a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>  /**<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>   */<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>  @InterfaceAudience.Private<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>  ConfigurationManager getConfigurationManager() {<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    return configurationManager;<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>  }<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span><a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  /**<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span>   * @return Return table descriptors implementation.<a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>   */<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>  public TableDescriptors getTableDescriptors() {<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>    return this.tableDescriptors;<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span>  }<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span><a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  /**<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>   * Reload the configuration from disk.<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>   */<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>  void updateConfiguration() {<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>    // Reload the configuration from disk.<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>    conf.reloadConfiguration();<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    configurationManager.notifyAllObservers(conf);<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>  }<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span><a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>    long evictedBlocks = 0;<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span><a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>    for(Store store : region.getStores()) {<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>      }<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>    }<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span><a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>    return CacheEvictionStats.builder()<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span>        .build();<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>  }<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span><a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>  @Override<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>  public double getCompactionPressure() {<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    double max = 0;<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>    for (Region region : onlineRegions.values()) {<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>      for (Store store : region.getStores()) {<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>        double normCount = store.getCompactionPressure();<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>        if (normCount &gt; max) {<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>          max = normCount;<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>        }<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>      }<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>    }<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>    return max;<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>  }<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span><a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>  @Override<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>    return hMemManager;<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>  }<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span><a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>  public MemStoreFlusher getMemStoreFlusher() {<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>    return cacheFlusher;<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>  }<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span><a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>  /**<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>   * For testing<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>   */<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>  @InterfaceAudience.Private<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>  public boolean walRollRequestFinished() {<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>    return this.walRoller.walRollFinished();<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>  }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>  @Override<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>  public ThroughputController getFlushThroughputController() {<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>    return flushThroughputController;<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>  }<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span><a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>  @Override<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>  public double getFlushPressure() {<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>      // return 0 during RS initialization<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>      return 0.0;<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>    }<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span><a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>  @Override<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>    ThroughputController old = this.flushThroughputController;<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span>    if (old != null) {<a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>      old.stop("configuration change");<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    }<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>    try {<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>      Superusers.initialize(newConf);<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>    } catch (IOException e) {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>    }<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>  }<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span><a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>  @Override<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>  public MetricsRegionServer getMetrics() {<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>    return metricsRegionServer;<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>  }<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span><a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>  @Override<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>    return this.secureBulkLoadManager;<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>  }<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span><a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>  @Override<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>      final Abortable abort) {<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>    final LockServiceClient client =<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>  }<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span><a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>  @Override<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>  }<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span><a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>  @Override<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>    return this.rsSpaceQuotaManager;<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>  }<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span><a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>  @Override<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>      return false;<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>    }<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>      // the current server could be stopping.<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>      return false;<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    }<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>    try {<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>      rss.reportFileArchival(null, request);<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>    } catch (ServiceException se) {<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>        if (LOG.isTraceEnabled()) {<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>              + " This will be retried.", ioe);<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>        }<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>        return false;<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>      }<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span>      if (rssStub == rss) {<a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>        rssStub = null;<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>      }<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>      // re-create the stub if we failed to report the archival<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span>      createRegionServerStatusStub(true);<a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>      return false;<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>    }<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>    return true;<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span>  }<a name="line.3868"></a>
-<span class="sourceLineNo">3869</span><a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span>    return eventLoopGroupConfig;<a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>  }<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span><a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>  @Override<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>  }<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span><a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>  }<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span><a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>    procedureResultReporter.complete(procId, error);<a name="line.3885"></a>
-<span class="sourceLineNo">3886</span>  }<a name="line.3886"></a>
-<span class="sourceLineNo">3887</span><a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>    for (;;) {<a name="line.3891"></a>
-<span class="sourceLineNo">3892</span>      rss = rssStub;<a name="line.3892"></a>
-<span class="sourceLineNo">3893</span>      if (rss != null) {<a name="line.3893"></a>
-<span class="sourceLineNo">3894</span>        break;<a name="line.3894"></a>
-<span class="sourceLineNo">3895</span>      }<a name="line.3895"></a>
-<span class="sourceLineNo">3896</span>      createRegionServerStatusStub();<a name="line.3896"></a>
-<span class="sourceLineNo">3897</span>    }<a name="line.3897"></a>
-<span class="sourceLineNo">3898</span>    try {<a name="line.3898"></a>
-<span class="sourceLineNo">3899</span>      rss.reportProcedureDone(null, request);<a name="line.3899"></a>
-<span class="sourceLineNo">3900</span>    } catch (ServiceException se) {<a name="line.3900"></a>
-<span class="sourceLineNo">3901</span>      if (rssStub == rss) {<a name="line.3901"></a>
-<span class="sourceLineNo">3902</span>        rssStub = null;<a name="line.3902"></a>
-<span class="sourceLineNo">3903</span>      }<a name="line.3903"></a>
-<span class="sourceLineNo">3904</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3904"></a>
-<span class="sourceLineNo">3905</span>    }<a name="line.3905"></a>
-<span class="sourceLineNo">3906</span>  }<a name="line.3906"></a>
-<span class="sourceLineNo">3907</span><a name="line.3907"></a>
-<span class="sourceLineNo">3908</span>  /**<a name="line.3908"></a>
-<span class="sourceLineNo">3909</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3909"></a>
-<span class="sourceLineNo">3910</span>   *<a name="line.3910"></a>
-<span class="sourceLineNo">3911</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3911"></a>
-<span class="sourceLineNo">3912</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3912"></a>
-<span class="sourceLineNo">3913</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3913"></a>
-<span class="sourceLineNo">3914</span>   *<a name="line.3914"></a>
-<span class="sourceLineNo">3915</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3915"></a>
-<span class="sourceLineNo">3916</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3916"></a>
-<span class="sourceLineNo">3917</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3917"></a>
-<span class="sourceLineNo">3918</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3918"></a>
-<span class="sourceLineNo">3919</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3919"></a>
-<span class="sourceLineNo">3920</span>   *<a name="line.3920"></a>
-<span class="sourceLineNo">3921</span>   * See HBASE-22404 for more details.<a name="line.3921"></a>
-<span class="sourceLineNo">3922</span>   *<a name="line.3922"></a>
-<span class="sourceLineNo">3923</span>   * @param procId the id of the open/close region procedure<a name="line.3923"></a>
-<span class="sourceLineNo">3924</span>   * @return true if the procedure can be submitted.<a name="line.3924"></a>
-<span class="sourceLineNo">3925</span>   */<a name="line.3925"></a>
-<span class="sourceLineNo">3926</span>  boolean submitRegionProcedure(long procId) {<a name="line.3926"></a>
-<span class="sourceLineNo">3927</span>    if (procId == -1) {<a name="line.3927"></a>
-<span class="sourceLineNo">3928</span>      return true;<a name="line.3928"></a>
-<span class="sourceLineNo">3929</span>    }<a name="line.3929"></a>
-<span class="sourceLineNo">3930</span>    // Ignore the region procedures which already submitted.<a name="line.3930"></a>
-<span class="sourceLineNo">3931</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3931"></a>
-<span class="sourceLineNo">3932</span>    if (previous != null) {<a name="line.3932"></a>
-<span class="sourceLineNo">3933</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3933"></a>
-<span class="sourceLineNo">3934</span>      return false;<a name="line.3934"></a>
-<span class="sourceLineNo">3935</span>    }<a name="line.3935"></a>
-<span class="sourceLineNo">3936</span>    // Ignore the region procedures which already executed.<a name="line.3936"></a>
-<span class="sourceLineNo">3937</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3937"></a>
-<span class="sourceLineNo">3938</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3938"></a>
-<span class="sourceLineNo">3939</span>      return false;<a name="line.3939"></a>
-<span class="sourceLineNo">3940</span>    }<a name="line.3940"></a>
-<span class="sourceLineNo">3941</span>    return true;<a name="line.3941"></a>
-<span class="sourceLineNo">3942</span>  }<a name="line.3942"></a>
-<span class="sourceLineNo">3943</span><a name="line.3943"></a>
-<span class="sourceLineNo">3944</span>  /**<a name="line.3944"></a>
-<span class="sourceLineNo">3945</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3945"></a>
-<span class="sourceLineNo">3946</span>   * @param procId the id of the open/close region procedure<a name="line.3946"></a>
-<span class="sourceLineNo">3947</span>   */<a name="line.3947"></a>
-<span class="sourceLineNo">3948</span>  public void finishRegionProcedure(long procId) {<a name="line.3948"></a>
-<span class="sourceLineNo">3949</span>    executedRegionProcedures.put(procId, procId);<a name="line.3949"></a>
-<span class="sourceLineNo">3950</span>    submittedRegionProcedures.remove(procId);<a name="line.3950"></a>
-<span class="sourceLineNo">3951</span>  }<a name="line.3951"></a>
-<span class="sourceLineNo">3952</span><a name="line.3952"></a>
-<span class="sourceLineNo">3953</span>  public boolean isShutDown() {<a name="line.3953"></a>
-<span class="sourceLineNo">3954</span>    return shutDown;<a name="line.3954"></a>
-<span class="sourceLineNo">3955</span>  }<a name="line.3955"></a>
-<span class="sourceLineNo">3956</span><a name="line.3956"></a>
-<span class="sourceLineNo">3957</span>  /**<a name="line.3957"></a>
-<span class="sourceLineNo">3958</span>   * Force to terminate region server when abort timeout.<a name="line.3958"></a>
-<span class="sourceLineNo">3959</span>   */<a name="line.3959"></a>
-<span class="sourceLineNo">3960</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3960"></a>
-<span class="sourceLineNo">3961</span><a name="line.3961"></a>
-<span class="sourceLineNo">3962</span>    public SystemExitWhenAbortTimeout() {<a name="line.3962"></a>
-<span class="sourceLineNo">3963</span>    }<a name="line.3963"></a>
-<span class="sourceLineNo">3964</span><a name="line.3964"></a>
-<span class="sourceLineNo">3965</span>    @Override<a name="line.3965"></a>
-<span class="sourceLineNo">3966</span>    public void run() {<a name="line.3966"></a>
-<span class="sourceLineNo">3967</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3967"></a>
-<span class="sourceLineNo">3968</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3968"></a>
-<span class="sourceLineNo">3969</span>          " Thread dump to stdout.");<a name="line.3969"></a>
-<span class="sourceLineNo">3970</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3970"></a>
-<span class="sourceLineNo">3971</span>      Runtime.getRuntime().halt(1);<a name="line.3971"></a>
-<span class="sourceLineNo">3972</span>    }<a name="line.3972"></a>
-<span class="sourceLineNo">3973</span>  }<a name="line.3973"></a>
-<span class="sourceLineNo">3974</span><a name="line.3974"></a>
-<span class="sourceLineNo">3975</span>  @Override<a name="line.3975"></a>
-<span class="sourceLineNo">3976</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3976"></a>
-<span class="sourceLineNo">3977</span>    return asyncClusterConnection;<a name="line.3977"></a>
-<span class="sourceLineNo">3978</span>  }<a name="line.3978"></a>
-<span class="sourceLineNo">3979</span><a name="line.3979"></a>
-<span class="sourceLineNo">3980</span>  @InterfaceAudience.Private<a name="line.3980"></a>
-<span class="sourceLineNo">3981</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3981"></a>
-<span class="sourceLineNo">3982</span>    return compactedFileDischarger;<a name="line.3982"></a>
-<span class="sourceLineNo">3983</span>  }<a name="line.3983"></a>
-<span class="sourceLineNo">3984</span><a name="line.3984"></a>
-<span class="sourceLineNo">3985</span>  /**<a name="line.3985"></a>
-<span class="sourceLineNo">3986</span>   * Return pause time configured in {@link HConstants#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME}}<a name="line.3986"></a>
-<span class="sourceLineNo">3987</span>   * @return pause time<a name="line.3987"></a>
-<span class="sourceLineNo">3988</span>   */<a name="line.3988"></a>
-<span class="sourceLineNo">3989</span>  @InterfaceAudience.Private<a name="line.3989"></a>
-<span class="sourceLineNo">3990</span>  public long getRetryPauseTime() {<a name="line.3990"></a>
-<span class="sourceLineNo">3991</span>    return this.retryPauseTime;<a name="line.3991"></a>
-<span class="sourceLineNo">3992</span>  }<a name="line.3992"></a>
-<span class="sourceLineNo">3993</span><a name="line.3993"></a>
-<span class="sourceLineNo">3994</span>  @Override<a name="line.3994"></a>
-<span class="sourceLineNo">3995</span>  public Optional&lt;ServerName&gt; getActiveMaster() {<a name="line.3995"></a>
-<span class="sourceLineNo">3996</span>    return Optional.ofNullable(masterAddressTracker.getMasterAddress());<a name="line.3996"></a>
-<span class="sourceLineNo">3997</span>  }<a name="line.3997"></a>
-<span class="sourceLineNo">3998</span><a name="line.3998"></a>
-<span class="sourceLineNo">3999</span>  @Override<a name="line.3999"></a>
-<span class="sourceLineNo">4000</span>  public List&lt;ServerName&gt; getBackupMasters() {<a name="line.4000"></a>
-<span class="sourceLineNo">4001</span>    return masterAddressTracker.getBackupMasters();<a name="line.4001"></a>
-<span class="sourceLineNo">4002</span>  }<a name="line.4002"></a>
-<span class="sourceLineNo">4003</span><a name="line.4003"></a>
-<span class="sourceLineNo">4004</span>  @Override<a name="line.4004"></a>
-<span class="sourceLineNo">4005</span>  public List&lt;ServerName&gt; getRegionServers() {<a name="line.4005"></a>
-<span class="sourceLineNo">4006</span>    return regionServerAddressTracker.getRegionServers();<a name="line.4006"></a>
-<span class="sourceLineNo">4007</span>  }<a name="line.4007"></a>
-<span class="sourceLineNo">4008</span><a name="line.4008"></a>
-<span class="sourceLineNo">4009</span>  @Override<a name="line.4009"></a>
-<span class="sourceLineNo">4010</span>  public List&lt;HRegionLocation&gt; getMetaLocations() {<a name="line.4010"></a>
-<span class="sourceLineNo">4011</span>    return metaRegionLocationCache.getMetaRegionLocations();<a name="line.4011"></a>
-<span class="sourceLineNo">4012</span>  }<a name="line.4012"></a>
-<span class="sourceLineNo">4013</span><a name="line.4013"></a>
-<span class="sourceLineNo">4014</span>  @RestrictedApi(explanation = "Should only be called in tests", link = "",<a name="line.4014"></a>
-<span class="sourceLineNo">4015</span>    allowedOnPath = ".*/src/test/.*")<a name="line.4015"></a>
-<span class="sourceLineNo">4016</span>  public MetaRegionLocationCache getMetaRegionLocationCache() {<a name="line.4016"></a>
-<span class="sourceLineNo">4017</span>    return metaRegionLocationCache;<a name="line.4017"></a>
-<span class="sourceLineNo">4018</span>  }<a name="line.4018"></a>
-<span class="sourceLineNo">4019</span>}<a name="line.4019"></a>
+<span class="sourceLineNo">3626</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>    try {<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>      String serviceName = call.getServiceName();<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>      if (service == null) {<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>            serviceName);<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>      }<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>      ServiceDescriptor serviceDesc =<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>          service.getDescriptorForType();<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span><a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>      String methodName = call.getMethodName();<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>      MethodDescriptor methodDesc =<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>          serviceDesc.findMethodByName(methodName);<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>      if (methodDesc == null) {<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>            " called on executorService " + serviceName);<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span><a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>      Message request =<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>      final Message.Builder responseBuilder =<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>        if (message != null) {<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>          responseBuilder.mergeFrom(message);<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>        }<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>      });<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>      if (exception != null) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>        throw exception;<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>      }<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    } catch (IOException ie) {<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>      throw new ServiceException(ie);<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>    }<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>  }<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span><a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>  /**<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>   * May be null if this is a master which not carry table.<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>   *<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>   * @return The block cache instance used by the regionserver.<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>   */<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>  @Override<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>    return Optional.ofNullable(this.blockCache);<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span><a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>  /**<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>   * May be null if this is a master which not carry table.<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>   *<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>   * @return The cache for mob files used by the regionserver.<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>   */<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>  @Override<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>  }<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span><a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>  @Override<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>  public AccessChecker getAccessChecker() {<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    return rpcServices.getAccessChecker();<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  @Override<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>  }<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span><a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  /**<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>   */<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>  @InterfaceAudience.Private<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  ConfigurationManager getConfigurationManager() {<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>    return configurationManager;<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>  }<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span><a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>  /**<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>   * @return Return table descriptors implementation.<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>   */<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>  @Override<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>  public TableDescriptors getTableDescriptors() {<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>    return this.tableDescriptors;<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>  }<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span><a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  /**<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span>   * Reload the configuration from disk.<a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>   */<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  void updateConfiguration() {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    // Reload the configuration from disk.<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>    conf.reloadConfiguration();<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>    configurationManager.notifyAllObservers(conf);<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>  }<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span><a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    long evictedBlocks = 0;<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span><a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    for(Store store : region.getStores()) {<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>      }<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>    }<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span><a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>    return CacheEvictionStats.builder()<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>        .build();<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>  }<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span><a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>  @Override<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span>  public double getCompactionPressure() {<a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>    double max = 0;<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>    for (Region region : onlineRegions.values()) {<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>      for (Store store : region.getStores()) {<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>        double normCount = store.getCompactionPressure();<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>        if (normCount &gt; max) {<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>          max = normCount;<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>        }<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>      }<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>    }<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>    return max;<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>  }<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span><a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>  @Override<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>    return hMemManager;<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>  }<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span><a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>  public MemStoreFlusher getMemStoreFlusher() {<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>    return cacheFlusher;<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>  }<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span><a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>  /**<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>   * For testing<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>   */<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>  @InterfaceAudience.Private<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>  public boolean walRollRequestFinished() {<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    return this.walRoller.walRollFinished();<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>  }<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span><a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>  @Override<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>  public ThroughputController getFlushThroughputController() {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>    return flushThroughputController;<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>  }<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span><a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>  @Override<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>  public double getFlushPressure() {<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>      // return 0 during RS initialization<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>      return 0.0;<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>    }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>  }<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span><a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>  @Override<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>    ThroughputController old = this.flushThroughputController;<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>    if (old != null) {<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>      old.stop("configuration change");<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    }<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span>    try {<a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>      Superusers.initialize(newConf);<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>    } catch (IOException e) {<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span>    }<a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  }<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span><a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>  @Override<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>  public MetricsRegionServer getMetrics() {<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>    return metricsRegionServer;<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span>  }<a name="line.3801"></a>
+<span class="sourceLineNo">3802</span><a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>  @Override<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span>    return this.secureBulkLoadManager;<a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>  }<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span><a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>  @Override<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>      final Abortable abort) {<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>    final LockServiceClient client =<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>  }<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span><a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>  @Override<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>  }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span><a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>  @Override<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>    return this.rsSpaceQuotaManager;<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>  }<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span><a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>  @Override<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>      return false;<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>    }<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>      // the current server could be stopping.<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>      return false;<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>    }<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>    try {<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>      rss.reportFileArchival(null, request);<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>    } catch (ServiceException se) {<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>        if (LOG.isTraceEnabled()) {<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>              + " This will be retried.", ioe);<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>        }<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>        return false;<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>      }<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>      if (rssStub == rss) {<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>        rssStub = null;<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>      }<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>      // re-create the stub if we failed to report the archival<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span>      createRegionServerStatusStub(true);<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>      return false;<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>    }<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>    return true;<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>  }<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span><a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>    return eventLoopGroupConfig;<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span>  }<a name="line.3865"></a>
+<span class="sourceLineNo">3866</span><a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>  @Override<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>  }<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span><a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>  }<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span><a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span>    procedureResultReporter.complete(procId, error);<a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  }<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span><a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>    for (;;) {<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>      rss = rssStub;<a name="line.3885"></a>
+<span class="sourceLineNo">3886</span>      if (rss != null) {<a name="line.3886"></a>
+<span class="sourceLineNo">3887</span>        break;<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>      }<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>      createRegionServerStatusStub();<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>    }<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>    try {<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>      rss.reportProcedureDone(null, request);<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>    } catch (ServiceException se) {<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>      if (rssStub == rss) {<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>        rssStub = null;<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span>      }<a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>    }<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span>  }<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span><a name="line.3900"></a>
+<span class="sourceLineNo">3901</span>  /**<a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>   *<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3906"></a>
+<span class="sourceLineNo">3907</span>   *<a name="line.3907"></a>
+<span class="sourceLineNo">3908</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3908"></a>
+<span class="sourceLineNo">3909</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3909"></a>
+<span class="sourceLineNo">3910</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3910"></a>
+<span class="sourceLineNo">3911</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3911"></a>
+<span class="sourceLineNo">3912</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3912"></a>
+<span class="sourceLineNo">3913</span>   *<a name="line.3913"></a>
+<span class="sourceLineNo">3914</span>   * See HBASE-22404 for more details.<a name="line.3914"></a>
+<span class="sourceLineNo">3915</span>   *<a name="line.3915"></a>
+<span class="sourceLineNo">3916</span>   * @param procId the id of the open/close region procedure<a name="line.3916"></a>
+<span class="sourceLineNo">3917</span>   * @return true if the procedure can be submitted.<a name="line.3917"></a>
+<span class="sourceLineNo">3918</span>   */<a name="line.3918"></a>
+<span class="sourceLineNo">3919</span>  boolean submitRegionProcedure(long procId) {<a name="line.3919"></a>
+<span class="sourceLineNo">3920</span>    if (procId == -1) {<a name="line.3920"></a>
+<span class="sourceLineNo">3921</span>      return true;<a name="line.3921"></a>
+<span class="sourceLineNo">3922</span>    }<a name="line.3922"></a>
+<span class="sourceLineNo">3923</span>    // Ignore the region procedures which already submitted.<a name="line.3923"></a>
+<span class="sourceLineNo">3924</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3924"></a>
+<span class="sourceLineNo">3925</span>    if (previous != null) {<a name="line.3925"></a>
+<span class="sourceLineNo">3926</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3926"></a>
+<span class="sourceLineNo">3927</span>      return false;<a name="line.3927"></a>
+<span class="sourceLineNo">3928</span>    }<a name="line.3928"></a>
+<span class="sourceLineNo">3929</span>    // Ignore the region procedures which already executed.<a name="line.3929"></a>
+<span class="sourceLineNo">3930</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3930"></a>
+<span class="sourceLineNo">3931</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3931"></a>
+<span class="sourceLineNo">3932</span>      return false;<a name="line.3932"></a>
+<span class="sourceLineNo">3933</span>    }<a name="line.3933"></a>
+<span class="sourceLineNo">3934</span>    return true;<a name="line.3934"></a>
+<span class="sourceLineNo">3935</span>  }<a name="line.3935"></a>
+<span class="sourceLineNo">3936</span><a name="line.3936"></a>
+<span class="sourceLineNo">3937</span>  /**<a name="line.3937"></a>
+<span class="sourceLineNo">3938</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3938"></a>
+<span class="sourceLineNo">3939</span>   * @param procId the id of the open/close region procedure<a name="line.3939"></a>
+<span class="sourceLineNo">3940</span>   */<a name="line.3940"></a>
+<span class="sourceLineNo">3941</span>  public void finishRegionProcedure(long procId) {<a name="line.3941"></a>
+<span class="sourceLineNo">3942</span>    executedRegionProcedures.put(procId, procId);<a name="line.3942"></a>
+<span class="sourceLineNo">3943</span>    submittedRegionProcedures.remove(procId);<a name="line.3943"></a>
+<span class="sourceLineNo">3944</span>  }<a name="line.3944"></a>
+<span class="sourceLineNo">3945</span><a name="line.3945"></a>
+<span class="sourceLineNo">3946</span>  public boolean isShutDown() {<a name="line.3946"></a>
+<span class="sourceLineNo">3947</span>    return shutDown;<a name="line.3947"></a>
+<span class="sourceLineNo">3948</span>  }<a name="line.3948"></a>
+<span class="sourceLineNo">3949</span><a name="line.3949"></a>
+<span class="sourceLineNo">3950</span>  /**<a name="line.3950"></a>
+<span class="sourceLineNo">3951</span>   * Force to terminate region server when abort timeout.<a name="line.3951"></a>
+<span class="sourceLineNo">3952</span>   */<a name="line.3952"></a>
+<span class="sourceLineNo">3953</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3953"></a>
+<span class="sourceLineNo">3954</span><a name="line.3954"></a>
+<span class="sourceLineNo">3955</span>    public SystemExitWhenAbortTimeout() {<a name="line.3955"></a>
+<span class="sourceLineNo">3956</span>    }<a name="line.3956"></a>
+<span class="sourceLineNo">3957</span><a name="line.3957"></a>
+<span class="sourceLineNo">3958</span>    @Override<a name="line.3958"></a>
+<span class="sourceLineNo">3959</span>    public void run() {<a name="line.3959"></a>
+<span class="sourceLineNo">3960</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3960"></a>
+<span class="sourceLineNo">3961</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3961"></a>
+<span class="sourceLineNo">3962</span>          " Thread dump to stdout.");<a name="line.3962"></a>
+<span class="sourceLineNo">3963</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3963"></a>
+<span class="sourceLineNo">3964</span>      Runtime.getRuntime().halt(1);<a name="line.3964"></a>
+<span class="sourceLineNo">3965</span>    }<a name="line.3965"></a>
+<span class="sourceLineNo">3966</span>  }<a name="line.3966"></a>
+<span class="sourceLineNo">3967</span><a name="line.3967"></a>
+<span class="sourceLineNo">3968</span>  @Override<a name="line.3968"></a>
+<span class="sourceLineNo">3969</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3969"></a>
+<span class="sourceLineNo">3970</span>    return asyncClusterConnection;<a name="line.3970"></a>
+<span class="sourceLineNo">3971</span>  }<a name="line.3971"></a>
+<span class="sourceLineNo">3972</span><a name="line.3972"></a>
+<span class="sourceLineNo">3973</span>  @InterfaceAudience.Private<a name="line.3973"></a>
+<span class="sourceLineNo">3974</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3974"></a>
+<span class="sourceLineNo">3975</span>    return compactedFileDischarger;<a name="line.3975"></a>
+<span class="sourceLineNo">3976</span>  }<a name="line.3976"></a>
+<span class="sourceLineNo">3977</span><a name="line.3977"></a>
+<span class="sourceLineNo">3978</span>  /**<a name="line.3978"></a>
+<span class="sourceLineNo">3979</span>   * Return pause time configured in {@link HConstants#HBASE_RPC_SHORTOPERATION_RETRY_PAUSE_TIME}}<a name="line.3979"></a>
+<span class="sourceLineNo">3980</span>   * @return pause time<a name="line.3980"></a>
+<span class="sourceLineNo">3981</span>   */<a name="line.3981"></a>
+<span class="sourceLineNo">3982</span>  @InterfaceAudience.Private<a name="line.3982"></a>
+<span class="sourceLineNo">3983</span>  public long getRetryPauseTime() {<a name="line.3983"></a>
+<span class="sourceLineNo">3984</span>    return this.retryPauseTime;<a name="line.3984"></a>
+<span class="sourceLineNo">3985</span>  }<a name="line.3985"></a>
+<span class="sourceLineNo">3986</span><a name="line.3986"></a>
+<span class="sourceLineNo">3987</span>  @Override<a name="line.3987"></a>
+<span class="sourceLineNo">3988</span>  public Optional&lt;ServerName&gt; getActiveMaster() {<a name="line.3988"></a>
+<span class="sourceLineNo">3989</span>    return Optional.ofNullable(masterAddressTracker.getMasterAddress());<a name="line.3989"></a>
+<span class="sourceLineNo">3990</span>  }<a name="line.3990"></a>
+<span class="sourceLineNo">3991</span><a name="line.3991"></a>
+<span class="sourceLineNo">3992</span>  @Override<a name="line.3992"></a>
+<span class="sourceLineNo">3993</span>  public List&lt;ServerName&gt; getBackupMasters() {<a name="line.3993"></a>
+<span class="sourceLineNo">3994</span>    return masterAddressTracker.getBackupMasters();<a name="line.3994"></a>
+<span class="sourceLineNo">3995</span>  }<a name="line.3995"></a>
+<span class="sourceLineNo">3996</span><a name="line.3996"></a>
+<span class="sourceLineNo">3997</span>  @Override<a name="line.3997"></a>
+<span class="sourceLineNo">3998</span>  public List&lt;ServerName&gt; getRegionServers() {<a name="line.3998"></a>
+<span class="sourceLineNo">3999</span>    return regionServerAddressTracker.getRegionServers();<a name="line.3999"></a>
+<span class="sourceLineNo">4000</span>  }<a name="line.4000"></a>
+<span class="sourceLineNo">4001</span><a name="line.4001"></a>
+<span class="sourceLineNo">4002</span>  @Override<a name="line.4002"></a>
+<span class="sourceLineNo">4003</span>  public List&lt;HRegionLocation&gt; getMetaLocations() {<a name="line.4003"></a>
+<span class="sourceLineNo">4004</span>    return metaRegionLocationCache.getMetaRegionLocations();<a name="line.4004"></a>
+<span class="sourceLineNo">4005</span>  }<a name="line.4005"></a>
+<span class="sourceLineNo">4006</span><a name="line.4006"></a>
+<span class="sourceLineNo">4007</span>  @RestrictedApi(explanation = "Should only be called in tests", link = "",<a name="line.4007"></a>
+<span class="sourceLineNo">4008</span>    allowedOnPath = ".*/src/test/.*")<a name="line.4008"></a>
+<span class="sourceLineNo">4009</span>  public MetaRegionLocationCache getMetaRegionLocationCache() {<a name="line.4009"></a>
+<span class="sourceLineNo">4010</span>    return metaRegionLocationCache;<a name="line.4010"></a>
+<span class="sourceLineNo">4011</span>  }<a name="line.4011"></a>
+<span class="sourceLineNo">4012</span>}<a name="line.4012"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index 566d77a..f768f6a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
@@ -2644,1387 +2644,1380 @@
 <span class="sourceLineNo">2636</span>    return abortRequested.compareAndSet(false, true);<a name="line.2636"></a>
 <span class="sourceLineNo">2637</span>  }<a name="line.2637"></a>
 <span class="sourceLineNo">2638</span><a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>  /**<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>   */<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>  public void abort(String reason) {<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>    abort(reason, null);<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>  }<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span><a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>  @Override<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>  public boolean isAborted() {<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>    return abortRequested.get();<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>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>   * hostname+port immediately.<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   */<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>  @InterfaceAudience.Private<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  protected void kill() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    this.killed = true;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>    abort("Simulated kill");<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>  }<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span><a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>  // Limits the time spent in the shutdown process.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>  private void scheduleAbortTimer() {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>    if (this.abortMonitor == null) {<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>      TimerTask abortTimeoutTask = null;<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>      try {<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>        timerTaskCtor.setAccessible(true);<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>      } catch (Exception e) {<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>      }<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      if (abortTimeoutTask != null) {<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>      }<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>    }<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>  }<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span><a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected final void shutdownChore(ScheduledChore chore) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (chore != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      chore.shutdown();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>  }<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>   * have already been called.<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>   */<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>  protected void stopServiceThreads() {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>    // clean up the scheduled chores<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>    if (this.choreService != null) {<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>      shutdownChore(nonceManagerChore);<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>      shutdownChore(compactionChecker);<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      shutdownChore(periodicFlusher);<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>      shutdownChore(healthCheckChore);<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>      shutdownChore(executorStatusChore);<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>      shutdownChore(storefileRefresher);<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>      shutdownChore(fsUtilizationChore);<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      shutdownChore(slowLogTableOpsChore);<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>      // cancel the remaining scheduled chores (in case we missed out any)<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>      // TODO: cancel will not cleanup the chores, so we need make sure we do not miss any<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>      choreService.shutdown();<a name="line.2704"></a>
+<span class="sourceLineNo">2639</span>  @Override<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>  public boolean isAborted() {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>    return abortRequested.get();<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>  }<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span><a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>  /*<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>   * hostname+port immediately.<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>  @InterfaceAudience.Private<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>  protected void kill() {<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>    this.killed = true;<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>    abort("Simulated kill");<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>  }<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span><a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>  // Limits the time spent in the shutdown process.<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  private void scheduleAbortTimer() {<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span>    if (this.abortMonitor == null) {<a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>      TimerTask abortTimeoutTask = null;<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>      try {<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>        timerTaskCtor.setAccessible(true);<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      } catch (Exception e) {<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>      }<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>      if (abortTimeoutTask != null) {<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>      }<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>    }<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span>  }<a name="line.2673"></a>
+<span class="sourceLineNo">2674</span><a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>  protected final void shutdownChore(ScheduledChore chore) {<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>    if (chore != null) {<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>      chore.shutdown();<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>    }<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>  }<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>  /**<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>   * have already been called.<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>   */<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>  protected void stopServiceThreads() {<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>    // clean up the scheduled chores<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    if (this.choreService != null) {<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>      shutdownChore(nonceManagerChore);<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>      shutdownChore(compactionChecker);<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>      shutdownChore(periodicFlusher);<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>      shutdownChore(healthCheckChore);<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>      shutdownChore(executorStatusChore);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>      shutdownChore(storefileRefresher);<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>      shutdownChore(fsUtilizationChore);<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>      shutdownChore(slowLogTableOpsChore);<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>      // cancel the remaining scheduled chores (in case we missed out any)<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>      // TODO: cancel will not cleanup the chores, so we need make sure we do not miss any<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      choreService.shutdown();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span><a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    if (this.cacheFlusher != null) {<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>      this.cacheFlusher.join();<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    }<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    if (this.walRoller != null) {<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      this.walRoller.close();<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>    if (this.cacheFlusher != null) {<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>      this.cacheFlusher.join();<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>    }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>    if (this.walRoller != null) {<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>      this.walRoller.close();<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>    }<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>    if (this.compactSplitThread != null) {<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>      this.compactSplitThread.join();<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>    }<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>    if (this.executorService != null) {<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>      this.executorService.shutdown();<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>    }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>    } else {<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>      if (this.replicationSourceHandler != null) {<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>      }<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>      if (this.replicationSinkHandler != null) {<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>      }<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>    }<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>  }<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span><a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>  /**<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>   * @return Return the object that implements the replication<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>   * source executorService.<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>   */<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>  @Override<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>    return replicationSourceHandler;<a name="line.2737"></a>
+<span class="sourceLineNo">2706</span>    if (this.compactSplitThread != null) {<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>      this.compactSplitThread.join();<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>    }<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>    if (this.executorService != null) {<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>      this.executorService.shutdown();<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>    }<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>    } else {<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>      if (this.replicationSourceHandler != null) {<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>      }<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>      if (this.replicationSinkHandler != null) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>      }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>    }<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>  }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>  /**<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>   * @return Return the object that implements the replication<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>   * source executorService.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>   */<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>  @Override<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>    return replicationSourceHandler;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>  }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span><a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>  /**<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>   */<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    return replicationSinkHandler;<a name="line.2737"></a>
 <span class="sourceLineNo">2738</span>  }<a name="line.2738"></a>
 <span class="sourceLineNo">2739</span><a name="line.2739"></a>
 <span class="sourceLineNo">2740</span>  /**<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>   */<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>    return replicationSinkHandler;<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>  }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span><a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>  /**<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>   * Method will block until a master is available. You can break from this<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>   * block by requesting the server stop.<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>   *<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return master + port, or null if server has been stopped<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   */<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return createRegionServerStatusStub(false);<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /**<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * You can break from this block by requesting the server stop.<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @return master + port, or null if server has been stopped<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  @InterfaceAudience.Private<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    if (rssStub != null) {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      return masterAddressTracker.getMasterAddress();<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    }<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    ServerName sn = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    long previousLogTime = 0;<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>    boolean interrupted = false;<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>    try {<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      while (keepLooping()) {<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        if (sn == null) {<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>          if (!keepLooping()) {<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>            // give up with no connection.<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>            return null;<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>          }<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>            LOG.debug("No master found; retry");<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>          }<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>          if (sleepInterrupted(200)) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>            interrupted = true;<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>          }<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>          continue;<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>        }<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span><a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        // If we are on the active master, use the shortcut<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>          break;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>        }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>        try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>          BlockingRpcChannel channel =<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>              shortOperationTimeout);<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>          break;<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>        } catch (IOException e) {<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>            e = e instanceof RemoteException ?<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>            } else {<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>            }<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>          }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>          if (sleepInterrupted(200)) {<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>            interrupted = true;<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>          }<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>        }<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>      }<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } finally {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      if (interrupted) {<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>        Thread.currentThread().interrupt();<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>      }<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>    this.rssStub = intRssStub;<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>    this.lockStub = intLockStub;<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>    return sn;<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>  /**<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>   * @return True if we should break loop because cluster is going down or<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>   */<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>  private boolean keepLooping() {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>  }<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span><a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>  /*<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>   * us by the master.<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>   * null if we failed to register.<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>   * @throws IOException<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>   */<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    if (masterServerName == null || rss == null) return null;<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>    RegionServerStartupResponse result = null;<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>    try {<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      rpcServices.requestCount.reset();<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>      LOG.info("reportForDuty to master=" + masterServerName + " with isa="<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        + rpcServices.isa + ", startcode=" + this.startcode);<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>      int port = rpcServices.isa.getPort();<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      }<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>      request.setPort(port);<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      request.setServerStartCode(this.startcode);<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      request.setServerCurrentTime(now);<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>    } catch (ServiceException se) {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>            ioe);<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>        // Re-throw IOE will cause RS to abort<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>        throw ioe;<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>        LOG.debug("Master is not running yet");<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      } else {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>        LOG.warn("error telling master we are up", se);<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>      }<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>      rssStub = null;<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>    }<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return result;<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
-<span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    try {<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>      if (rss == null) { // Try to connect one more time<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>        createRegionServerStatusStub();<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>        rss = rssStub;<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>        if (rss == null) {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>          // Still no luck, we tried<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2906"></a>
-<span class="sourceLineNo">2907</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>              .build();<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>        }<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>      }<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    } catch (ServiceException e) {<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>          .build();<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>    }<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>  }<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span><a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  /**<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>   * Close meta region if we carry it<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>   * @param abort Whether we're running an abort.<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    HRegion meta = null;<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    try {<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>        if (hri.isMetaRegion()) {<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>          meta = e.getValue();<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>        }<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>        if (meta != null) break;<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>      }<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    } finally {<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    }<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>  }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span><a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>  /**<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>   * Schedule closes on all user regions.<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * that are already closed or that are closing.<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   * @param abort Whether we're running an abort.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  private void closeUserRegions(final boolean abort) {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    try {<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>        HRegion r = e.getValue();<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>          // Don't update zk with this close transition; pass false.<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>        }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span>      }<a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>    } finally {<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>    }<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  }<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span><a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  /** @return the info server */<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  public InfoServer getInfoServer() {<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>    return infoServer;<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>   * @return true if a stop has been requested.<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>   */<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public boolean isStopped() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.stopped;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public boolean isStopping() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return this.stopping;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  @Override<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>  public Configuration getConfiguration() {<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>    return conf;<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  }<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span><a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>    return this.onlineRegions;<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  }<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span><a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>  public int getNumberOfOnlineRegions() {<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>    return this.onlineRegions.size();<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span><a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   * For tests, web ui and metrics.<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>   */<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>    return Collections.unmodifiableCollection(regions);<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  }<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span><a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>  @Override<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  public void addRegion(HRegion region) {<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>    configurationManager.registerObserver(region);<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>  }<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span><a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>      long size) {<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>    if (!sortedRegions.containsKey(size)) {<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>    }<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>    sortedRegions.get(size).add(region);<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>  }<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  /**<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>   *   the biggest.<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>   */<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>    // we'll sort the regions in reverse<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>    }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>    return sortedRegions;<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>  /**<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>   *   biggest.<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>   */<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>    // we'll sort the regions in reverse<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>    }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>    return sortedRegions;<a name="line.3043"></a>
+<span class="sourceLineNo">2741</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>   * Method will block until a master is available. You can break from this<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>   * block by requesting the server stop.<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>   *<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>   * @return master + port, or null if server has been stopped<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>   */<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    return createRegionServerStatusStub(false);<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>  }<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span><a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>  /**<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>   * You can break from this block by requesting the server stop.<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>   * @return master + port, or null if server has been stopped<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>   */<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>  @InterfaceAudience.Private<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    if (rssStub != null) {<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>      return masterAddressTracker.getMasterAddress();<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span>    }<a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>    ServerName sn = null;<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>    long previousLogTime = 0;<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>    boolean interrupted = false;<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    try {<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>      while (keepLooping()) {<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>        if (sn == null) {<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>          if (!keepLooping()) {<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>            // give up with no connection.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            return null;<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>          }<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>            LOG.debug("No master found; retry");<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>          }<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>          if (sleepInterrupted(200)) {<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>            interrupted = true;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>          }<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>          continue;<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>        }<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span><a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>        // If we are on the active master, use the shortcut<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>          break;<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>        }<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        try {<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>          BlockingRpcChannel channel =<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>              shortOperationTimeout);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>          break;<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>        } catch (IOException e) {<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>          if (EnvironmentEdgeManager.currentTime() &gt; (previousLogTime + 1000)) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>            e = e instanceof RemoteException ?<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>            } else {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>            }<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>            previousLogTime = EnvironmentEdgeManager.currentTime();<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>          }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>          if (sleepInterrupted(200)) {<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>            interrupted = true;<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>          }<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>        }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>      }<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>    } finally {<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>      if (interrupted) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>        Thread.currentThread().interrupt();<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      }<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>    }<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>    this.rssStub = intRssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>    this.lockStub = intLockStub;<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>    return sn;<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>  }<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span><a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>  /**<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>   * @return True if we should break loop because cluster is going down or<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>   */<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>  private boolean keepLooping() {<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>    return !this.stopped &amp;&amp; isClusterUp();<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>  /*<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>   * us by the master.<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>   * null if we failed to register.<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>   * @throws IOException<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>   */<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>    if (masterServerName == null || rss == null) return null;<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>    RegionServerStartupResponse result = null;<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>    try {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>      rpcServices.requestCount.reset();<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      rpcServices.rpcFullScanRequestCount.reset();<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>      LOG.info("reportForDuty to master=" + masterServerName + " with isa="<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        + rpcServices.isa + ", startcode=" + this.startcode);<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      int port = rpcServices.isa.getPort();<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>      }<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>      request.setPort(port);<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>      request.setServerStartCode(this.startcode);<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>      request.setServerCurrentTime(now);<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>    } catch (ServiceException se) {<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>            ioe);<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>        // Re-throw IOE will cause RS to abort<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>        throw ioe;<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        LOG.debug("Master is not running yet");<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>      } else {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>        LOG.warn("error telling master we are up", se);<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>      }<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>      rssStub = null;<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>    }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    return result;<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>  }<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span><a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>  @Override<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>    try {<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2893"></a>
+<span class="sourceLineNo">2894</span>      if (rss == null) { // Try to connect one more time<a name="line.2894"></a>
+<span class="sourceLineNo">2895</span>        createRegionServerStatusStub();<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>        rss = rssStub;<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>        if (rss == null) {<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>          // Still no luck, we tried<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>              .build();<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>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2906"></a>
+<span class="sourceLineNo">2907</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2907"></a>
+<span class="sourceLineNo">2908</span>    } catch (ServiceException e) {<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>          .build();<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>  /**<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span>   * Close meta region if we carry it<a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>   * @param abort Whether we're running an abort.<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>   */<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    HRegion meta = null;<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>    try {<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>        if (hri.isMetaRegion()) {<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>          meta = e.getValue();<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>        }<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>        if (meta != null) break;<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>      }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    } finally {<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>    }<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>  }<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span><a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>  /**<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>   * Schedule closes on all user regions.<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>   * that are already closed or that are closing.<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>   * @param abort Whether we're running an abort.<a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>   */<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>  private void closeUserRegions(final boolean abort) {<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>    try {<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>        HRegion r = e.getValue();<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>          // Don't update zk with this close transition; pass false.<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<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>    } finally {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>  }<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span><a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>  /** @return the info server */<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  public InfoServer getInfoServer() {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>    return infoServer;<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>  }<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span><a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>  /**<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>   * @return true if a stop has been requested.<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>   */<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>  @Override<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>  public boolean isStopped() {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>    return this.stopped;<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>  @Override<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>  public boolean isStopping() {<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>    return this.stopping;<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>  }<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span><a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  @Override<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>  public Configuration getConfiguration() {<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>    return conf;<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>  }<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span><a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>    return this.onlineRegions;<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>  }<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span><a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>  public int getNumberOfOnlineRegions() {<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>    return this.onlineRegions.size();<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  }<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span><a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  /**<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>   * For tests, web ui and metrics.<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>   */<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>    return Collections.unmodifiableCollection(regions);<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>  }<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span><a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  @Override<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>  public void addRegion(HRegion region) {<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>    configurationManager.registerObserver(region);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span><a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>      long size) {<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>    if (!sortedRegions.containsKey(size)) {<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>    }<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>    sortedRegions.get(size).add(region);<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  }<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>  /**<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>   *   the biggest.<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>   */<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>    // we'll sort the regions in reverse<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>    }<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>    return sortedRegions;<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span><a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>  /**<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span>   *   biggest.<a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>   */<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    // we'll sort the regions in reverse<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    }<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>    return sortedRegions;<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>  /**<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>   * @return time stamp in millis of when this region server was started<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>   */<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>  public long getStartcode() {<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>    return this.startcode;<a name="line.3043"></a>
 <span class="sourceLineNo">3044</span>  }<a name="line.3044"></a>
 <span class="sourceLineNo">3045</span><a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>  /**<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>   * @return time stamp in millis of when this region server was started<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>   */<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  public long getStartcode() {<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>    return this.startcode;<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>  }<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span><a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  /** @return reference to FlushRequester */<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public FlushRequester getFlushRequester() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return this.cacheFlusher;<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 CompactionRequester getCompactionRequestor() {<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>    return this.compactSplitThread;<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 LeaseManager getLeaseManager() {<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>    return leaseManager;<a name="line.3066"></a>
+<span class="sourceLineNo">3046</span>  /** @return reference to FlushRequester */<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>  @Override<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public FlushRequester getFlushRequester() {<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.cacheFlusher;<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>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public CompactionRequester getCompactionRequestor() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.compactSplitThread;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public LeaseManager getLeaseManager() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return leaseManager;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>   * @return Return the rootDir.<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  protected Path getDataRootDir() {<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>    return dataRootDir;<a name="line.3066"></a>
 <span class="sourceLineNo">3067</span>  }<a name="line.3067"></a>
 <span class="sourceLineNo">3068</span><a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>  /**<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span>   * @return Return the rootDir.<a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>   */<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>  protected Path getDataRootDir() {<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>    return dataRootDir;<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>  }<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span><a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>  @Override<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>  public FileSystem getFileSystem() {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>    return dataFs;<a name="line.3078"></a>
+<span class="sourceLineNo">3069</span>  @Override<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  public FileSystem getFileSystem() {<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>    return dataFs;<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  }<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span><a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  /**<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   */<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>  boolean isDataFileSystemOk() {<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>    return this.dataFsOk;<a name="line.3078"></a>
 <span class="sourceLineNo">3079</span>  }<a name="line.3079"></a>
 <span class="sourceLineNo">3080</span><a name="line.3080"></a>
 <span class="sourceLineNo">3081</span>  /**<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3082"></a>
+<span class="sourceLineNo">3082</span>   * @return Return the walRootDir.<a name="line.3082"></a>
 <span class="sourceLineNo">3083</span>   */<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>  boolean isDataFileSystemOk() {<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>    return this.dataFsOk;<a name="line.3085"></a>
+<span class="sourceLineNo">3084</span>  public Path getWALRootDir() {<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    return walRootDir;<a name="line.3085"></a>
 <span class="sourceLineNo">3086</span>  }<a name="line.3086"></a>
 <span class="sourceLineNo">3087</span><a name="line.3087"></a>
 <span class="sourceLineNo">3088</span>  /**<a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>   * @return Return the walRootDir.<a name="line.3089"></a>
+<span class="sourceLineNo">3089</span>   * @return Return the walFs.<a name="line.3089"></a>
 <span class="sourceLineNo">3090</span>   */<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>  public Path getWALRootDir() {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    return walRootDir;<a name="line.3092"></a>
+<span class="sourceLineNo">3091</span>  public FileSystem getWALFileSystem() {<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>    return walFs;<a name="line.3092"></a>
 <span class="sourceLineNo">3093</span>  }<a name="line.3093"></a>
 <span class="sourceLineNo">3094</span><a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>  /**<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>   * @return Return the walFs.<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>   */<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>  public FileSystem getWALFileSystem() {<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    return walFs;<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>  }<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span><a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>  @Override<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>  public String toString() {<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>    return getServerName().toString();<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>  }<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span><a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>  @Override<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>  public ZKWatcher getZooKeeper() {<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    return zooKeeper;<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>  }<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span><a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>  @Override<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    return csm;<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>  }<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span><a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>  @Override<a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  public ServerName getServerName() {<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    return serverName;<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>  }<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span><a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>    return this.rsHost;<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>  @Override<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>    return this.regionsInTransitionInRS;<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>  }<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span><a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>  @Override<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>  public ExecutorService getExecutorService() {<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>    return executorService;<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>  }<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span><a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>  @Override<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>  public ChoreService getChoreService() {<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>    return choreService;<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>  }<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span><a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>  @Override<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    return rsQuotaManager;<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>  }<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>  //<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  // Main program and support routines<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>   * Load the replication executorService objects, if any<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   */<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALFactory walFactory) throws IOException {<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>    // read in the name of the source replication class from the config file.<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span><a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>    // read in the name of the sink replication class from the config file.<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span><a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>    // only one object.<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>      server.sameReplicationSourceAndSink = true;<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>    } else {<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walFactory);<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>      server.sameReplicationSourceAndSink = false;<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><a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>      Path oldLogDir, WALFactory walFactory) throws IOException {<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>    try {<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>      throw new IOException("Could not find class for " + classname);<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>    }<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    service.initialize(server, walFs, logDir, oldLogDir, walFactory);<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    return service;<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>  }<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span><a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    if(!this.isOnline()){<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>      return walGroupsReplicationStatus;<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>    }<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    }<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>    return walGroupsReplicationStatus;<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>  }<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span><a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>  /**<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>   */<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>  static HRegionServer constructRegionServer(<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      final Configuration conf<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>  ) {<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>    try {<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>      return c.newInstance(conf);<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    } catch (Exception e) {<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>          + regionServerClass.toString(), e);<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>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>   */<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>  public static void main(String[] args) {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>    VersionInfo.logVersion();<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>    @SuppressWarnings("unchecked")<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span><a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Gets the online regions of the specified table.<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * all the ONLINE regions in the table.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * @param tableName table to limit the scope of the query<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   */<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>  @Override<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>     synchronized (this.onlineRegions) {<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>           tableRegions.add(region);<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>     }<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>     return tableRegions;<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>   }<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span><a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>  @Override<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>    List&lt;HRegion&gt; allRegions;<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>    synchronized (this.onlineRegions) {<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      // Return a clone copy of the onlineRegions<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>    }<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>    return allRegions;<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>  }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>  /**<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>   * Gets the online tables in this RS.<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>   * This method looks at the in-memory onlineRegions.<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>   * @return all the online tables in this RS<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>   */<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>    synchronized (this.onlineRegions) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>      }<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>    }<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>    return tables;<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>  }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span><a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>  public String[] getRegionServerCoprocessors() {<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>    try {<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>    } catch (IOException exception) {<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>          "skipping.");<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>    }<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>    for (HRegion region: regions) {<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      try {<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>      } catch (IOException exception) {<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>            "; skipping.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<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>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    return coprocessors.toArray(new String[0]);<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>  }<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span><a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>  /**<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>   * @param region Region to close<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>   */<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    try {<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>            " - ignoring and continuing");<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>      }<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>    } catch (IOException e) {<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>          " - ignoring and continuing", e);<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><a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>  /**<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>   *<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>   * &lt;p&gt;<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>   * &lt;/p&gt;<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>   * &lt;p&gt;<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>   * &lt;/p&gt;<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>   *<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>   * @param encodedName Region to close<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>   * @param abort True if we are aborting<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>   * @return True if closed a region.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>   * @throws NotServingRegionException if the region is not online<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>   */<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>        final ServerName destination)<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      throws NotServingRegionException {<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>    //Check for permissions to close.<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>    // Can be null if we're calling close on a region that's not online<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>      try {<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>      } catch (IOException exp) {<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>        return false;<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>    // previous can come back 'null' if not in map.<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>        Boolean.FALSE);<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span><a name="line.3364"></a>
... 9159 lines suppressed ...