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 ©2007–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 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 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 ©2007–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="" /> 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>"2"</tt></li></ul></td>
-<td>522</td>
+<td>524</td>
<td><img src="images/icon_error_sml.gif" alt="" /> 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="" /> 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 <EOF> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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="" /> 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 ©2007–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 ©2007–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 ©2007–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 ©2007–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 ©2007–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 ©2007–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> </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> </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"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd"> </span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd"> </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> 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> 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> 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 void <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> 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 <a href="../../../../src-html/org/apache/hadoop/hbase/Abortable.html#line.44">isAborted</a>()</pre>
+<pre>boolean <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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 <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 <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3571">seqNum</a></pre>
+<pre>private final 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> 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> serverName,
long 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 <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.3578">getServerName</a>()</pre>
+<pre>public <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.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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3582">getSeqNum</a>()</pre>
+<pre>public long <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 <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3962">SystemExitWhenAbortTimeout</a>()</pre>
+<pre>public <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 void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3966">run</a>()</pre>
+<pre>public void <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> in interface <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> reason)</code> </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> 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> 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> 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><<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> region,
long size)</code> </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> encodedName,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> destination,
long closeSeqNum,
boolean selfMove)</code> </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> </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> 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> 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 rss,
<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionSizeStore.html" title="interface in org.apache.hadoop.hbase.quotas">RegionSizeStore</a> 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 reportStartTime,
long reportEndTime)</code> </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> </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> </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> </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 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> 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> 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> region)</code> </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 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> encodedName,
boolean 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> region,
boolean 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 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> </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><? extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class [...]
org.apache.hadoop.conf.Configuration 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> </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> 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> 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> 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> msg)</code> </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 conf)</code> </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> </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 conf,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> 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 regionLoadBldr,
org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.RegionSpecifier.Builder regionSpecifier)</code> </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> encodedRegionName)</code> </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 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> </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> user,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsUserSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsUserSource</a> userSource)</code> </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> </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> 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 controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest serviceRequest)</code> </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 procId,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a> callable)</code> </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 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> </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><<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#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><<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#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><<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>></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> </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> </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> </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> </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> </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> </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><<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><<a hr [...]
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOffHeapSize--">getCopyOfOnlineRegionsSortedByOffHeapSize</a></span>()</code> </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><<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><<a hr [...]
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getCopyOfOnlineRegionsSortedByOnHeapSize--">getCopyOfOnlineRegionsSortedByOnHeapSize</a></span>()</code> </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> </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><? extends javax.servlet.http.HttpServlet></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getDumpServlet--">getDumpServlet</a></span>()</code> </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> </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> </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> 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> </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> </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> </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> </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> </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> </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[] encodedRegionName)</code> </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> </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> </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> </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><<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>></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> </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> </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><<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>></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> encodedRegionName)</code> </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> </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> </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[] regionName)</code> </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><<a href="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>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#getOnlineRegions--">getOnlineRegions</a></span>()</code> </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> </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><<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#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><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/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> </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[] 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> 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[] 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> encodedRegionName)</code> </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> encodedRegionName)</code> </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><<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#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><<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#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> 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> </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> </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> </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> </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><<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#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> </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><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>></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> </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> </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> </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> </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> </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> </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> </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 conf)</code> </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> regionInfo)</code> </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> </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> </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><<a href="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> </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> </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> </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><<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#getWALs--">getWALs</a></span>()</code> </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> </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> </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 c)</code> </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> </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> </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> </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 conf)</code> </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> </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> </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> </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> </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> </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> </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> </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> </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> </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> 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> host)</code> </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>[] args)</code> </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> </td>
</tr>
-<tr id="i141" class="rowColor">
+<tr id="i140" class="altColor">
<td class="colFirst"><code>private static <T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>><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><T> xface,
@@ -1400,33 +1396,33 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSe
org.apache.hadoop.fs.Path oldLogDir,
<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a> walFactory)</code> </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 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> 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><<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> 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> </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 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 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> error)</code> </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> encodedName)</code> </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> r,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> 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> 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><<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><<a href="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> </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 request)</code> </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> 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> </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 conf)</code> </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 conf,
<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> 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> chore)</code> </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 close)</code> </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 millis)</code> </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> </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> 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> msg,
boolean 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 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> </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> 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 reportStartTime,
long reportEndTime)</code> </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[] 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> 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><org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName> 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> </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 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 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 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 <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3591">TIMEOUT_REGION_MOVED</a></pre>
+<pre>private static final 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 <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 void <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> 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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2647">isAborted</a>()</pre>
+<pre>public boolean <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: <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 <a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcSe
<li class="blockList">
<h4>kill</h4>
<pre>@InterfaceAudience.Private
-protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2657">kill</a>()</pre>
+protected void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>scheduleAbortTimer</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2663">scheduleAbortTimer</a>()</pre>
+<pre>private void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>shutdownChore</h4>
-<pre>protected final void <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> chore)</pre>
+<pre>protected final void <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> chore)</pre>
</li>
</ul>
<a name="stopServiceThreads--">
@@ -3776,7 +3766,7 @@ protected void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>stopServiceThreads</h4>
-<pre>protected void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2691">stopServiceThreads</a>()</pre>
+<pre>protected void <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 void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getReplicationSourceService</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2736">getReplicationSourceService</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getReplicationSinkService</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2743">getReplicationSinkService</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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 void <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>createRegionServerStatusStub</h4>
-<pre>private <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.html#line.2755">createRegionServerStatusStub</a>()</pre>
+<pre>private <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.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 void <a href="../../../../../src-html/org/apache/hadoop/hbas
<li class="blockList">
<h4>createRegionServerStatusStub</h4>
<pre>@InterfaceAudience.Private
-protected <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.html#line.2768">createRegionServerStatusStub</a>(boolean refresh)</pre>
+protected <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.html#line.2761">createRegionServerStatusStub</a>(boolean 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>keepLooping</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2842">keepLooping</a>()</pre>
+<pre>private boolean <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>reportForDuty</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2853">reportForDuty</a>()
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getLastSequenceId</h4>
-<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2896">getLastSequenceId</a>(byte[] encodedRegionName)</pre>
+<pre>public org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2889">getLastSequenceId</a>(byte[] 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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>closeMetaTableRegions</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2926">closeMetaTableRegions</a>(boolean abort)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2919">closeMetaTableRegions</a>(boolean 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>closeUserRegions</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2949">closeUserRegions</a>(boolean abort)</pre>
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2942">closeUserRegions</a>(boolean 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getInfoServer</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2965">getInfoServer</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>isStopped</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2973">isStopped</a>()</pre>
+<pre>public boolean <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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>isStopping</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2978">isStopping</a>()</pre>
+<pre>public boolean <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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getConfiguration</h4>
-<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2983">getConfiguration</a>()</pre>
+<pre>public org.apache.hadoop.conf.Configuration <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: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getOnlineRegions</h4>
-<pre>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><<a href="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>> <a href="../../../../../src-html/org/apac [...]
+<pre>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><<a href="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>> <a href="../../../../../src-html/org/apac [...]
</li>
</ul>
<a name="getNumberOfOnlineRegions--">
@@ -3995,7 +3985,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getNumberOfOnlineRegions</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2991">getNumberOfOnlineRegions</a>()</pre>
+<pre>public int <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getOnlineRegionsLocalContext</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3000">getOnlineRegionsLocalContext</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>addRegion</h4>
-<pre>public void <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> region)</pre>
+<pre>public void <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> region)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>addRegion</h4>
-<pre>private void <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><<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 void <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><<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> region,
long size)</pre>
</li>
@@ -4042,7 +4032,7 @@ protected <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><<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><<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><<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><<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 <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><<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><<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><<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><<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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getStartcode</h4>
-<pre>public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3049">getStartcode</a>()</pre>
+<pre>public long <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getFlushRequester</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3055">getFlushRequester</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushRequester.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushRequester</a> <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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getCompactionRequestor</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3060">getCompactionRequestor</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequester</a> <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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getLeaseManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3065">getLeaseManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getDataRootDir</h4>
-<pre>protected org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3072">getDataRootDir</a>()</pre>
+<pre>protected org.apache.hadoop.fs.Path <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getFileSystem</h4>
-<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3077">getFileSystem</a>()</pre>
+<pre>public org.apache.hadoop.fs.FileSystem <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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>isDataFileSystemOk</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3084">isDataFileSystemOk</a>()</pre>
+<pre>boolean <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getWALRootDir</h4>
-<pre>public org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3091">getWALRootDir</a>()</pre>
+<pre>public org.apache.hadoop.fs.Path <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getWALFileSystem</h4>
-<pre>public org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3098">getWALFileSystem</a>()</pre>
+<pre>public org.apache.hadoop.fs.FileSystem <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>toString</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3103">toString</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in class <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getZooKeeper</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3108">getZooKeeper</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a> <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: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getCoordinatedStateManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3113">getCoordinatedStateManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a> <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: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getServerName</h4>
-<pre>public <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.html#line.3118">getServerName</a>()</pre>
+<pre>public <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.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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegionServerCoprocessorHost</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3122">getRegionServerCoprocessorHost</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3115">getRegionServerCoprocessorHost</a>()</pre>
</li>
</ul>
<a name="getRegionsInTransitionInRS--">
@@ -4263,7 +4253,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegionsInTransitionInRS</h4>
-<pre>public <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><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>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3127">getRegionsInTransitionInRS</a>()</pre>
+<pre>public <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><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>> <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: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getExecutorService</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3132">getExecutorService</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getChoreService</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3137">getChoreService</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a> <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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegionServerRpcQuotaManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3142">getRegionServerRpcQuotaManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>createNewReplicationInstance</h4>
-<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3152">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3145">createNewReplicationInstance</a>(org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> server,
org.apache.hadoop.fs.FileSystem walFs,
org.apache.hadoop.fs.Path walDir,
@@ -4345,7 +4335,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>newReplicationInstance</h4>
-<pre>private static <T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>> T <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 <T extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>> T <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><T> xface,
org.apache.hadoop.conf.Configuration conf,
<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> server,
@@ -4366,7 +4356,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getWalGroupsReplicationStatus</h4>
-<pre>public <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><<a href="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>> [...]
+<pre>public <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><<a href="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>> [...]
</li>
</ul>
<a name="constructRegionServer-java.lang.Class-org.apache.hadoop.conf.Configuration-">
@@ -4375,7 +4365,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>constructRegionServer</h4>
-<pre>static <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.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><? extends <a href="../../../../../org/apache/had [...]
+<pre>static <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.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><? extends <a href="../../../../../org/apache/had [...]
org.apache.hadoop.conf.Configuration conf)</pre>
<div class="block">Utility for constructing an instance of the passed HRegionServer class.</div>
</li>
@@ -4386,7 +4376,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>main</h4>
-<pre>public static void <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>[] args)</pre>
+<pre>public static void <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>[] 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegions</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3249">getRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title [...]
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegions</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3263">getRegions</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3256">getRegions</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getOnlineTables</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3277">getOnlineTables</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegionServerCoprocessors</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3287">getRegionServerCoprocessors</a>()</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3280">getRegionServerCoprocessors</a>()</pre>
</li>
</ul>
<a name="closeRegionIgnoreErrors-org.apache.hadoop.hbase.client.RegionInfo-boolean-">
@@ -4463,7 +4453,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>closeRegionIgnoreErrors</h4>
-<pre>private void <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> region,
+<pre>private void <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> region,
boolean abort)</pre>
<div class="block">Try to close the region, logs a warning on failure but continues.</div>
<dl>
@@ -4478,7 +4468,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>closeRegion</h4>
-<pre>protected boolean <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> encodedName,
+<pre>protected boolean <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> encodedName,
boolean abort,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getOnlineRegion</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3414">getOnlineRegion</a>(byte[] regionName)</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3407">getOnlineRegion</a>(byte[] 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegion</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> encodedRegionName)</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> encodedRegionName)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>removeRegion</h4>
-<pre>public boolean <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> r,
+<pre>public boolean <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> r,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> destination)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegion</h4>
-<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3454">getRegion</a>(byte[] regionName)
+<pre>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3447">getRegion</a>(byte[] 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegionByEncodedName</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> encodedRegionName)
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getRegionByEncodedName</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3465">getRegionByEncodedName</a>(byte[] regionName,
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3458">getRegionByEncodedName</a>(byte[] 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> 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>cleanup</h4>
-<pre>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> <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> t,
+<pre>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> <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> 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> 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>convertThrowableToIOE</h4>
-<pre>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> <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> t,
+<pre>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> <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> 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> msg)</pre>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
@@ -4649,7 +4639,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>checkFileSystem</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3527">checkFileSystem</a>()</pre>
+<pre>boolean <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>updateRegionFavoredNodesMapping</h4>
-<pre>public void <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> encodedRegionName,
+<pre>public void <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> 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><org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName> favoredNodes)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getFavoredNodesForRegion</h4>
-<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> encodedRegionName)</pre>
+<pre>public <a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> 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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>getNonceManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3565">getNonceManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3558">getNonceManager</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>addToMovedRegions</h4>
-<pre>private void <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> encodedName,
+<pre>private void <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> encodedName,
<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> destination,
long closeSeqNum,
boolean selfMove)</pre>
@@ -4729,7 +4719,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<ul class="blockList">
<li class="blockList">
<h4>removeFromMovedRegions</h4>
-<pre>void <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> encodedName)</pre>
+<pre>void <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> encodedName)</pre>
</li>
</ul>
<a name="getMovedRegion-java.lang.String-">
@@ -4739,7 +4729,7 @@ protected <a href="../../../../../org/apache/hadoop/hbase/ServerName.html"
<li class="blockList">
<h4>getMovedRegion</h4>
<pre>@InterfaceAudience.Private
-public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a> <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> encodedRegionName)</pre>
+public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a> <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> encodedRegionName)</pre>
</li>
</ul>
<a name="movedRegionCacheExpiredTime--">
@@ -4749,7 +4739,7 @@ public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion
<li class="blockList">
<h4>movedRegionCacheExpiredTime</h4>
<pre>@InterfaceAudience.Private
-public int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3613">movedRegionCacheExpiredTime</a>()</pre>
+public int <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getMyEphemeralNodePath</h4>
-<pre>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> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3617">getMyEphemeralNodePath</a>()</pre>
+<pre>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> <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>isHealthCheckerConfigured</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3621">isHealthCheckerConfigured</a>()</pre>
+<pre>private boolean <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getCompactSplitThread</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3629">getCompactSplitThread</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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 int <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 <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3633">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3626">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest serviceRequest)
throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
<dl>
@@ -4804,7 +4794,7 @@ public int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getBlockCache</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3681">getBlockCache</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getMobFileCache</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3691">getMobFileCache</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getAccessChecker</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3696">getAccessChecker</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> in interface <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getZKPermissionWatcher</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3701">getZKPermissionWatcher</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/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> in interface <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 int <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> <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> <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getTableDescriptors</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3717">getTableDescriptors</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a> <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> in interface <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>updateConfiguration</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3724">updateConfiguration</a>()</pre>
+<pre>void <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 int <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> <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> region)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a> <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> region)</pre>
</li>
</ul>
<a name="getCompactionPressure--">
@@ -4914,7 +4904,7 @@ public int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getCompactionPressure</h4>
-<pre>public double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3746">getCompactionPressure</a>()</pre>
+<pre>public double <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> in interface <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getHeapMemoryManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3760">getHeapMemoryManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<ul class="blockList">
<li class="blockList">
<h4>getMemStoreFlusher</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3764">getMemStoreFlusher</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3757">getMemStoreFlusher</a>()</pre>
</li>
</ul>
<a name="walRollRequestFinished--">
@@ -4958,7 +4948,7 @@ public int <a href="../../../../../src-html/org/apache/hadoop/hbase/re
<li class="blockList">
<h4>walRollRequestFinished</h4>
<pre>@InterfaceAudience.Private
-public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3773">walRollRequestFinished</a>()</pre>
+public boolean <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getFlushThroughputController</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3778">getFlushThroughputController</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getFlushPressure</h4>
-<pre>public double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3783">getFlushPressure</a>()</pre>
+<pre>public double <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> in interface <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>onConfigurationChange</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3792">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration newConf)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3785">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration newConf)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getMetrics</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3806">getMetrics</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getSecureBulkLoadManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3811">getSecureBulkLoadManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>regionLock</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a> <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><<a href="../../../../../org/apache/hadoop/hbase/client/RegionIn [...]
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a> <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><<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> description,
<a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a> abort)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>unassign</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3824">unassign</a>(byte[] regionName)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3817">unassign</a>(byte[] 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: <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getRegionServerSpaceQuotaManager</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3829">getRegionServerSpaceQuotaManager</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.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> in interface <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>reportFileArchivalForQuotas</h4>
-<pre>public boolean <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> tableName,
+<pre>public boolean <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> 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><<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><<a href="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: <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getEventLoopGroupConfig</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3870">getEventLoopGroupConfig</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a> <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>createConnection</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3875">createConnection</a>(org.apache.hadoop.conf.Configuration conf)
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3868">createConnection</a>(org.apache.hadoop.conf.Configuration 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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>executeProcedure</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3880">executeProcedure</a>(long procId,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3873">executeProcedure</a>(long procId,
<a href="../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a> callable)</pre>
</li>
</ul>
@@ -5162,7 +5152,7 @@ public boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>remoteProcedureComplete</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3884">remoteProcedureComplete</a>(long procId,
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3877">remoteProcedureComplete</a>(long 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> error)</pre>
</li>
</ul>
@@ -5172,7 +5162,7 @@ public boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>reportProcedureDone</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3888">reportProcedureDone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest request)
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3881">reportProcedureDone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest 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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>submitRegionProcedure</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3926">submitRegionProcedure</a>(long procId)</pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3919">submitRegionProcedure</a>(long 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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>finishRegionProcedure</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3948">finishRegionProcedure</a>(long procId)</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3941">finishRegionProcedure</a>(long 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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>isShutDown</h4>
-<pre>public boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3953">isShutDown</a>()</pre>
+<pre>public boolean <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<ul class="blockList">
<li class="blockList">
<h4>getAsyncClusterConnection</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3976">getAsyncClusterConnection</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a> <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: <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 boolean <a href="../../../../../src-html/org/apache/hadoop/hbas
<li class="blockList">
<h4>getCompactedHFilesDischarger</h4>
<pre>@InterfaceAudience.Private
-public <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3981">getCompactedHFilesDischarger</a>()</pre>
+public <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3974">getCompactedHFilesDischarger</a>()</pre>
</li>
</ul>
<a name="getRetryPauseTime--">
@@ -5266,7 +5256,7 @@ public <a href="../../../../../org/apache/hadoop/hbase/regionserver/Compact
<li class="blockList">
<h4>getRetryPauseTime</h4>
<pre>@InterfaceAudience.Private
-public long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3990">getRetryPauseTime</a>()</pre>
+public long <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/r
<ul class="blockList">
<li class="blockList">
<h4>getActiveMaster</h4>
-<pre>public <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><<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.html#line.3995">getActiveMaster</a>()</pre>
+<pre>public <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><<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.html#line.3988">getActiveMaster</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/r
<ul class="blockList">
<li class="blockList">
<h4>getBackupMasters</h4>
-<pre>public <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><<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.html#line.4000">getBackupMasters</a>()</pre>
+<pre>public <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><<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.html#line.3993">getBackupMasters</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/r
<ul class="blockList">
<li class="blockList">
<h4>getRegionServers</h4>
-<pre>public <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><<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.html#line.4005">getRegionServers</a>()</pre>
+<pre>public <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><<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.html#line.3998">getRegionServers</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/r
<ul class="blockList">
<li class="blockList">
<h4>getMetaLocations</h4>
-<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.4010">getMetaLocations</a>()</pre>
+<pre>public <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><<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>> <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: <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 long <a href="../../../../../src-html/org/apache/hadoop/hbase/r
<ul class="blockListLast">
<li class="blockList">
<h4>getMetaRegionLocationCache</h4>
-<pre>public <a href="../../../../../org/apache/hadoop/hbase/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase">MetaRegionLocationCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.4016">getMetaRegionLocationCache</a>()</pre>
+<pre>public <a href="../../../../../org/apache/hadoop/hbase/MetaRegionLocationCache.html" title="class in org.apache.hadoop.hbase">MetaRegionLocationCache</a> <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 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 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 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 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 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 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 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 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 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 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 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 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 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 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<? extends TimerTask> 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<? extends TimerTask> 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 && 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 && 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() > (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 && 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() > (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 && 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<String, HRegion> 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<String, HRegion> 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() && 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<String, HRegion> 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<HRegion> getOnlineRegionsLocalContext() {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> Collection<HRegion> 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<Long, Collection<HRegion>> 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<>());<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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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() > (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 && 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() > (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 && 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<String, HRegion> 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<String, HRegion> 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() && 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<String, HRegion> 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<HRegion> getOnlineRegionsLocalContext() {<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> Collection<HRegion> 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<Long, Collection<HRegion>> 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<>());<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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<byte[], Boolean> 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 <T extends ReplicationService> T newReplicationInstance(String classname,<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> Class<T> 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<? extends T> 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<String, ReplicationStatus> getWalGroupsReplicationStatus(){<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> Map<String, ReplicationStatus> walGroupsReplicationStatus = new TreeMap<>();<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<ReplicationSourceInterface> allSources = new ArrayList<>();<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<? extends HRegionServer> 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<? extends HRegionServer> 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<? extends HRegionServer> regionServerClass = (Class<? extends HRegionServer>) 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 <code>hbase:meta</code>.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> * Only returns <em>online</em> 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 <code>tableName</code><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<HRegion> getRegions(TableName tableName) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> List<HRegion> tableRegions = new ArrayList<>();<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<HRegion> getRegions() {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> List<HRegion> 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<>(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<TableName> getOnlineTables() {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span> Set<TableName> tables = new HashSet<>();<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<String> coprocessors = new TreeSet<>();<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<HRegion> 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> * <p><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> * </p><a name="line.3334"></a>
-<span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span> * <p><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> * </p><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) && (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 <code>regionName</code> 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<>(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 <code>regionName</code><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<byte[], Boolean> 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 <T extends ReplicationService> T newReplicationInstance(String classname,<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span> Class<T> 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<? extends T> 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<String, ReplicationStatus> getWalGroupsReplicationStatus(){<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span> Map<String, ReplicationStatus> walGroupsReplicationStatus = new TreeMap<>();<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<ReplicationSourceInterface> allSources = new ArrayList<>();<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<? extends HRegionServer> 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<? extends HRegionServer> 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<? extends HRegionServer> regionServerClass = (Class<? extends HRegionServer>) 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 <code>hbase:meta</code>.<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span> * Only returns <em>online</em> 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 <code>tableName</code><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<HRegion> getRegions(TableName tableName) {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span> List<HRegion> tableRegions = new ArrayList<>();<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<HRegion> getRegions() {<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span> List<HRegion> 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<>(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<TableName> getOnlineTables() {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span> Set<TableName> tables = new HashSet<>();<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<String> coprocessors = new TreeSet<>();<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<HRegion> 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> * <p><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> * </p><a name="line.3327"></a>
+<span class="sourceLineNo">3328</span><a name="line.3328"></a>
+<span class="sourceLineNo">3329</span> * <p><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> * </p><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) && (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 <code>regionName</code> 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<>(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 <code>regionName</code><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 && 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 && 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 <code>t</code> 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 <code>t</code> is not an IOE<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span> * @return Make <code>t</code> 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 && 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<org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName> 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 < 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 <code>t</code> 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 <code>t</code> is not an IOE<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span> * @return Make <code>t</code> 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 && 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<org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName> 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 < 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 -> {<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<BlockCache> 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<MobFileCache> 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 > 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<RegionInfo> 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<Entry<String, Long>> 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<ServerName> 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<ServerName> 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<ServerName> 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<HRegionLocation> 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 -> {<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<BlockCache> 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<MobFileCache> 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 > 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<RegionInfo> 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<Entry<String, Long>> 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<ServerName> 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<ServerName> 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<ServerName> 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<HRegionLocation> 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<? extends TimerTask> 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<? extends TimerTask> 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 && 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 && 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() > (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 && 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() > (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 && 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<String, HRegion> 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<String, HRegion> 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() && 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<String, HRegion> 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<HRegion> getOnlineRegionsLocalContext() {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> Collection<HRegion> 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<Long, Collection<HRegion>> 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<>());<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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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() > (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 && 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() > (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 && 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<String, HRegion> 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<String, HRegion> 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() && 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<String, HRegion> 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<HRegion> getOnlineRegionsLocalContext() {<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> Collection<HRegion> 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<Long, Collection<HRegion>> 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<>());<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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<byte[], Boolean> 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 <T extends ReplicationService> T newReplicationInstance(String classname,<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> Class<T> 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<? extends T> 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<String, ReplicationStatus> getWalGroupsReplicationStatus(){<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> Map<String, ReplicationStatus> walGroupsReplicationStatus = new TreeMap<>();<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<ReplicationSourceInterface> allSources = new ArrayList<>();<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<? extends HRegionServer> 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<? extends HRegionServer> 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<? extends HRegionServer> regionServerClass = (Class<? extends HRegionServer>) 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 <code>hbase:meta</code>.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> * Only returns <em>online</em> 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 <code>tableName</code><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<HRegion> getRegions(TableName tableName) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> List<HRegion> tableRegions = new ArrayList<>();<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<HRegion> getRegions() {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> List<HRegion> 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<>(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<TableName> getOnlineTables() {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span> Set<TableName> tables = new HashSet<>();<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<String> coprocessors = new TreeSet<>();<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<HRegion> 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> * <p><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> * </p><a name="line.3334"></a>
-<span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span> * <p><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> * </p><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) && (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 <code>regionName</code> 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<>(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 <code>regionName</code><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<byte[], Boolean> 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 <T extends ReplicationService> T newReplicationInstance(String classname,<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span> Class<T> 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<? extends T> 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<String, ReplicationStatus> getWalGroupsReplicationStatus(){<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span> Map<String, ReplicationStatus> walGroupsReplicationStatus = new TreeMap<>();<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<ReplicationSourceInterface> allSources = new ArrayList<>();<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<? extends HRegionServer> 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<? extends HRegionServer> 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<? extends HRegionServer> regionServerClass = (Class<? extends HRegionServer>) 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 <code>hbase:meta</code>.<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span> * Only returns <em>online</em> 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 <code>tableName</code><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<HRegion> getRegions(TableName tableName) {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span> List<HRegion> tableRegions = new ArrayList<>();<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<HRegion> getRegions() {<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span> List<HRegion> 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<>(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<TableName> getOnlineTables() {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span> Set<TableName> tables = new HashSet<>();<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<String> coprocessors = new TreeSet<>();<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<HRegion> 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> * <p><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> * </p><a name="line.3327"></a>
+<span class="sourceLineNo">3328</span><a name="line.3328"></a>
+<span class="sourceLineNo">3329</span> * <p><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> * </p><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) && (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 <code>regionName</code> 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<>(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 <code>regionName</code><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 && 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 && 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 <code>t</code> 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 <code>t</code> is not an IOE<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span> * @return Make <code>t</code> 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 && 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<org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName> 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 < 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 <code>t</code> 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 <code>t</code> is not an IOE<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span> * @return Make <code>t</code> 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 && 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<org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName> 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 < 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 -> {<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<BlockCache> 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<MobFileCache> 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 > 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<RegionInfo> 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<Entry<String, Long>> 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<ServerName> 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<ServerName> 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<ServerName> 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<HRegionLocation> 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 -> {<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<BlockCache> 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<MobFileCache> 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 > 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<RegionInfo> 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<Entry<String, Long>> 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<ServerName> 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<ServerName> 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<ServerName> 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<HRegionLocation> 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<? extends TimerTask> 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<? extends TimerTask> 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 && 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 && 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() > (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 && 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() > (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 && 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<String, HRegion> 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<String, HRegion> 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() && 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<String, HRegion> 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<HRegion> getOnlineRegionsLocalContext() {<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span> Collection<HRegion> 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<Long, Collection<HRegion>> 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<>());<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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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() > (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 && 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() > (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 && 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<String, HRegion> 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<String, HRegion> 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() && 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<String, HRegion> 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<HRegion> getOnlineRegionsLocalContext() {<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span> Collection<HRegion> 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<Long, Collection<HRegion>> 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<>());<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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<Long, Collection<HRegion>> 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<Long, Collection<HRegion>> sortedRegions = new TreeMap<>(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<byte[], Boolean> 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 <T extends ReplicationService> T newReplicationInstance(String classname,<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span> Class<T> 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<? extends T> 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<String, ReplicationStatus> getWalGroupsReplicationStatus(){<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span> Map<String, ReplicationStatus> walGroupsReplicationStatus = new TreeMap<>();<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<ReplicationSourceInterface> allSources = new ArrayList<>();<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<? extends HRegionServer> 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<? extends HRegionServer> 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<? extends HRegionServer> regionServerClass = (Class<? extends HRegionServer>) 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 <code>hbase:meta</code>.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span> * Only returns <em>online</em> 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 <code>tableName</code><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<HRegion> getRegions(TableName tableName) {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span> List<HRegion> tableRegions = new ArrayList<>();<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<HRegion> getRegions() {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span> List<HRegion> 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<>(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<TableName> getOnlineTables() {<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span> Set<TableName> tables = new HashSet<>();<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<String> coprocessors = new TreeSet<>();<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<HRegion> 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> * <p><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> * </p><a name="line.3334"></a>
-<span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span> * <p><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> * </p><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) && (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 ...