You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2019/05/04 17:42:21 UTC
[hbase-site] branch asf-site updated: Published site at
e884a25f8dd19f542ab5ea1ca9809095bd15dd0d.
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 2916bf4 Published site at e884a25f8dd19f542ab5ea1ca9809095bd15dd0d.
2916bf4 is described below
commit 2916bf4463e98c10ef3b43db1ea123c3df4abd93
Author: jenkins <bu...@apache.org>
AuthorDate: Sat May 4 17:42:07 2019 +0000
Published site at e884a25f8dd19f542ab5ea1ca9809095bd15dd0d.
---
acid-semantics.html | 2 +-
apache_hbase_reference_guide.pdf | 4 +-
book.html | 2 +-
bulk-loads.html | 2 +-
checkstyle-aggregate.html | 10 +-
coc.html | 2 +-
dependencies.html | 2 +-
dependency-convergence.html | 2 +-
dependency-info.html | 2 +-
dependency-management.html | 174 +--
devapidocs/constant-values.html | 37 +-
devapidocs/index-all.html | 50 +-
.../apache/hadoop/hbase/backup/package-tree.html | 4 +-
.../apache/hadoop/hbase/class-use/ServerName.html | 2 +-
.../apache/hadoop/hbase/client/package-tree.html | 22 +-
.../apache/hadoop/hbase/filter/package-tree.html | 8 +-
.../org/apache/hadoop/hbase/http/package-tree.html | 2 +-
.../apache/hadoop/hbase/io/hfile/package-tree.html | 6 +-
.../org/apache/hadoop/hbase/ipc/package-tree.html | 2 +-
.../hadoop/hbase/mapreduce/package-tree.html | 2 +-
.../assignment/RegionRemoteProcedureBase.html | 74 +-
...TransitRegionStateProcedure.TransitionType.html | 10 +-
.../assignment/TransitRegionStateProcedure.html | 104 +-
.../hbase/master/assignment/package-tree.html | 2 +-
.../hadoop/hbase/master/balancer/package-tree.html | 2 +-
.../apache/hadoop/hbase/master/package-tree.html | 4 +-
.../hbase/master/procedure/InitMetaProcedure.html | 52 +-
.../procedure/ReopenTableRegionsProcedure.html | 50 +-
.../hbase/master/procedure/SplitWALProcedure.html | 78 +-
.../procedure/SwitchRpcThrottleProcedure.html | 64 +-
.../procedure/class-use/ProcedurePrepareLatch.html | 2 +-
.../hbase/master/procedure/package-tree.html | 2 +-
.../replication/AbstractPeerNoLockProcedure.html | 67 +-
.../master/replication/AbstractPeerProcedure.html | 4 +-
.../hbase/master/replication/AddPeerProcedure.html | 4 +-
.../master/replication/DisablePeerProcedure.html | 4 +-
.../master/replication/EnablePeerProcedure.html | 4 +-
.../master/replication/ModifyPeerProcedure.html | 42 +-
.../replication/RecoverStandbyProcedure.html | 4 +-
.../master/replication/RemovePeerProcedure.html | 4 +-
.../SyncReplicationReplayWALProcedure.html | 34 +-
.../TransitPeerSyncReplicationStateProcedure.html | 54 +-
.../replication/UpdatePeerConfigProcedure.html | 4 +-
.../org/apache/hadoop/hbase/package-tree.html | 14 +-
.../ProcedureUtil.CompatStateSerializer.html | 10 +-
.../procedure2/ProcedureUtil.StateSerializer.html | 12 +-
.../hadoop/hbase/procedure2/ProcedureUtil.html | 135 ++-
.../class-use/ProcedureSuspendedException.html | 23 +-
.../hadoop/hbase/procedure2/package-tree.html | 2 +-
.../hbase/quotas/class-use/RpcThrottleStorage.html | 2 +-
.../apache/hadoop/hbase/quotas/package-tree.html | 8 +-
.../hadoop/hbase/regionserver/package-tree.html | 18 +-
.../regionserver/querymatcher/package-tree.html | 4 +-
.../hbase/regionserver/wal/package-tree.html | 4 +-
.../hadoop/hbase/replication/package-tree.html | 2 +-
.../replication/regionserver/package-tree.html | 2 +-
.../hadoop/hbase/rest/model/package-tree.html | 2 +-
.../hadoop/hbase/security/access/package-tree.html | 4 +-
.../apache/hadoop/hbase/security/package-tree.html | 2 +-
.../apache/hadoop/hbase/thrift/package-tree.html | 2 +-
.../hadoop/hbase/util/class-use/RetryCounter.html | 106 ++
.../org/apache/hadoop/hbase/util/package-tree.html | 10 +-
.../org/apache/hadoop/hbase/util/package-use.html | 86 +-
.../org/apache/hadoop/hbase/wal/package-tree.html | 2 +-
.../src-html/org/apache/hadoop/hbase/Version.html | 4 +-
.../assignment/RegionRemoteProcedureBase.html | 564 ++++-----
...TransitRegionStateProcedure.TransitionType.html | 1026 ++++++++--------
.../assignment/TransitRegionStateProcedure.html | 1026 ++++++++--------
.../hbase/master/procedure/InitMetaProcedure.html | 260 ++--
.../procedure/ReopenTableRegionsProcedure.html | 334 +++---
.../hbase/master/procedure/SplitWALProcedure.html | 335 +++---
.../procedure/SwitchRpcThrottleProcedure.html | 278 ++---
.../replication/AbstractPeerNoLockProcedure.html | 162 +--
.../master/replication/ModifyPeerProcedure.html | 480 ++++----
.../SyncReplicationReplayWALProcedure.html | 262 ++---
.../TransitPeerSyncReplicationStateProcedure.html | 712 ++++++-----
.../ProcedureUtil.CompatStateSerializer.html | 619 +++++-----
.../procedure2/ProcedureUtil.StateSerializer.html | 619 +++++-----
.../hadoop/hbase/procedure2/ProcedureUtil.html | 619 +++++-----
downloads.html | 2 +-
export_control.html | 2 +-
index.html | 2 +-
issue-management.html | 2 +-
licenses.html | 2 +-
mailing-lists.html | 2 +-
metrics.html | 2 +-
old_news.html | 2 +-
plugin-management.html | 2 +-
plugins.html | 2 +-
poweredbyhbase.html | 2 +-
project-info.html | 2 +-
project-reports.html | 2 +-
pseudo-distributed.html | 2 +-
replication.html | 2 +-
resources.html | 2 +-
scm.html | 2 +-
sponsors.html | 2 +-
summary.html | 2 +-
supportingprojects.html | 2 +-
team.html | 2 +-
testdevapidocs/index-all.html | 2 -
.../apache/hadoop/hbase/io/hfile/package-tree.html | 2 +-
...tManagerBase.CallQueueTooBigOnceRsExecutor.html | 10 +-
...TestAssignmentManagerBase.FaultyRsExecutor.html | 8 +-
.../TestAssignmentManagerBase.GoodRsExecutor.html | 8 +-
...ManagerBase.HangOnCloseThenRSCrashExecutor.html | 10 +-
...ignmentManagerBase.HangThenRSCrashExecutor.html | 8 +-
...nmentManagerBase.HangThenRSRestartExecutor.html | 8 +-
.../TestAssignmentManagerBase.MockRSExecutor.html | 4 +-
...e.MockRSProcedureDispatcher.MockRemoteCall.html | 6 +-
...nmentManagerBase.MockRSProcedureDispatcher.html | 10 +-
.../TestAssignmentManagerBase.NoopRsExecutor.html | 10 +-
.../TestAssignmentManagerBase.RandRsExecutor.html | 12 +-
...tManagerBase.ServerNotYetRunningRsExecutor.html | 6 +-
...ignmentManagerBase.SocketTimeoutRsExecutor.html | 12 +-
...rBase.TimeoutThenCallQueueTooBigRsExecutor.html | 12 +-
.../assignment/TestAssignmentManagerBase.html | 98 +-
...cedureRetryBackoff.TestModifyPeerProcedure.html | 4 +-
...stTransitPeerSyncReplicationStateProcedure.html | 4 +-
.../org/apache/hadoop/hbase/package-tree.html | 10 +-
...dureUtil.TestProcedureNoDefaultConstructor.html | 4 +-
.../hadoop/hbase/procedure2/TestProcedureUtil.html | 31 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../hadoop/hbase/regionserver/package-tree.html | 6 +-
.../org/apache/hadoop/hbase/test/package-tree.html | 4 +-
.../org/apache/hadoop/hbase/wal/package-tree.html | 2 +-
...tManagerBase.CallQueueTooBigOnceRsExecutor.html | 1244 ++++++++++----------
...TestAssignmentManagerBase.FaultyRsExecutor.html | 1244 ++++++++++----------
.../TestAssignmentManagerBase.GoodRsExecutor.html | 1244 ++++++++++----------
...ManagerBase.HangOnCloseThenRSCrashExecutor.html | 1244 ++++++++++----------
...ignmentManagerBase.HangThenRSCrashExecutor.html | 1244 ++++++++++----------
...nmentManagerBase.HangThenRSRestartExecutor.html | 1244 ++++++++++----------
.../TestAssignmentManagerBase.MockRSExecutor.html | 1244 ++++++++++----------
...e.MockRSProcedureDispatcher.MockRemoteCall.html | 1244 ++++++++++----------
...nmentManagerBase.MockRSProcedureDispatcher.html | 1244 ++++++++++----------
.../TestAssignmentManagerBase.NoopRsExecutor.html | 1244 ++++++++++----------
.../TestAssignmentManagerBase.RandRsExecutor.html | 1244 ++++++++++----------
...tManagerBase.ServerNotYetRunningRsExecutor.html | 1244 ++++++++++----------
...ignmentManagerBase.SocketTimeoutRsExecutor.html | 1244 ++++++++++----------
...rBase.TimeoutThenCallQueueTooBigRsExecutor.html | 1244 ++++++++++----------
.../assignment/TestAssignmentManagerBase.html | 1244 ++++++++++----------
...dureUtil.TestProcedureNoDefaultConstructor.html | 104 +-
.../hadoop/hbase/procedure2/TestProcedureUtil.html | 104 +-
143 files changed, 14152 insertions(+), 13809 deletions(-)
diff --git a/acid-semantics.html b/acid-semantics.html
index 8747216..f1d937a 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -457,7 +457,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</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 79d67ce..a03ce4b 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20190503144601+00'00')
-/CreationDate (D:20190503144601+00'00')
+/ModDate (D:20190504173836+00'00')
+/CreationDate (D:20190504173836+00'00')
>>
endobj
2 0 obj
diff --git a/book.html b/book.html
index b1d9276..26a3a59 100644
--- a/book.html
+++ b/book.html
@@ -41693,7 +41693,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
<div id="footer">
<div id="footer-text">
Version 3.0.0-SNAPSHOT<br>
-Last updated 2019-05-03 14:29:33 UTC
+Last updated 2019-05-04 17:22:21 UTC
</div>
</div>
</body>
diff --git a/bulk-loads.html b/bulk-loads.html
index 48ea9c3..197baf8 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -162,7 +162,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</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 92033cb..e59acef 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -8896,12 +8896,12 @@
<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>680</td>
+<td>681</td>
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td></tr>
<tr class="b">
<td></td>
<td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3273</td>
+<td>3272</td>
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td></tr>
<tr class="a">
<td>misc</td>
@@ -17706,7 +17706,7 @@
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
<td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input ' *' while parsing JAVADOC_TAG</td>
<td>117</td></tr>
<tr class="a">
@@ -60494,7 +60494,7 @@
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 112).</td>
-<td>280</td></tr></table></div>
+<td>278</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</h3>
<table border="0" class="table table-striped">
@@ -103355,7 +103355,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</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 823517b..6659169 100644
--- a/coc.html
+++ b/coc.html
@@ -231,7 +231,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</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 984d437..73e6bc4 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -311,7 +311,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</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 7fd1bd8..292b179d 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -505,7 +505,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</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 c3c15b1..71201a9 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -184,7 +184,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</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 446f983..578d384 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -241,504 +241,510 @@
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a></td></tr>
<tr class="b">
+<td>javax.annotation</td>
+<td><a class="externalLink" href="http://jcp.org/en/jsr/detail?id=250">javax.annotation-api</a></td>
+<td>1.2</td>
+<td>jar</td>
+<td><a class="externalLink" href="https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html">CDDL + GPLv2 with classpath exception</a></td></tr>
+<tr class="a">
<td>javax.servlet</td>
<td><a class="externalLink" href="http://servlet-spec.java.net">javax.servlet-api</a></td>
<td>3.1.0</td>
<td>jar</td>
<td><a class="externalLink" href="https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html">CDDL + GPLv2 with classpath exception</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>javax.servlet.jsp</td>
<td><a class="externalLink" href="http://jsp.java.net">javax.servlet.jsp-api</a></td>
<td>2.3.1</td>
<td>jar</td>
<td><a class="externalLink" href="http://glassfish.dev.java.net/nonav/public/CDDL+GPL.html">CDDL + GPLv2 with classpath exception</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>javax.ws.rs</td>
<td><a class="externalLink" href="http://jax-rs-spec.java.net">javax.ws.rs-api</a></td>
<td>2.0.1</td>
<td>jar</td>
<td><a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL 1.1</a>, <a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">GPL2 w/ CPE</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>javax.xml.bind</td>
<td><a class="externalLink" href="http://jaxb.java.net/">jaxb-api</a></td>
<td>2.2.12</td>
<td>jar</td>
<td><a class="externalLink" href="https://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL 1.1</a>, <a class="externalLink" href="https://glassfish.java.net/public/CDDL+GPL_1_1.html">GPL2 w/ CPE</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>jline</td>
<td><a class="externalLink" href="http://jline.sourceforge.net">jline</a></td>
<td>0.9.94</td>
<td>jar</td>
<td><a href="LICENSE.txt">BSD</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>junit</td>
<td><a class="externalLink" href="http://junit.org">junit</a></td>
<td>4.12</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.eclipse.org/legal/epl-v10.html">Eclipse Public License 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>log4j</td>
<td><a class="externalLink" href="http://logging.apache.org/log4j/1.2/">log4j</a></td>
<td>1.2.17</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>net.spy</td>
<td><a class="externalLink" href="http://www.couchbase.org/code/couchbase/java">spymemcached</a></td>
<td>2.12.2</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.avro</td>
<td><a class="externalLink" href="http://avro.apache.org">avro</a></td>
<td>1.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.commons</td>
<td><a class="externalLink" href="http://commons.apache.org/proper/commons-crypto/">commons-crypto</a></td>
<td>1.0.0</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.commons</td>
<td><a class="externalLink" href="http://commons.apache.org/proper/commons-lang/">commons-lang3</a></td>
<td>3.6</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.commons</td>
<td><a class="externalLink" href="http://commons.apache.org/proper/commons-math/">commons-math3</a></td>
<td>3.6.1</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.curator</td>
<td><a class="externalLink" href="http://curator.apache.org/curator-client">curator-client</a></td>
<td>4.0.0</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.curator</td>
<td><a class="externalLink" href="http://curator.apache.org/curator-framework">curator-framework</a></td>
<td>4.0.0</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.curator</td>
<td><a class="externalLink" href="http://curator.apache.org/curator-recipes">curator-recipes</a></td>
<td>4.0.0</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hadoop</td>
<td>hadoop-annotations</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hadoop</td>
<td>hadoop-auth</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hadoop</td>
<td>hadoop-client</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hadoop</td>
<td>hadoop-common</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hadoop</td>
<td>hadoop-hdfs</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hadoop</td>
<td>hadoop-mapreduce-client-core</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hadoop</td>
<td>hadoop-mapreduce-client-jobclient</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hadoop</td>
<td>hadoop-minicluster</td>
<td>2.7.7</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-annotations">hbase-annotations</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>test-jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-backup">hbase-backup</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-client">hbase-client</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-common">hbase-common</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-endpoint">hbase-endpoint</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-examples">hbase-examples</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-external-blockcache">hbase-external-blockcache</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-hadoop-compat">hbase-hadoop-compat</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-hadoop2-compat">hbase-hadoop2-compat</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-http">hbase-http</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-mapreduce">hbase-mapreduce</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-metrics">hbase-metrics</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-metrics-api">hbase-metrics-api</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-procedure">hbase-procedure</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-procedure">hbase-procedure</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>test-jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-protocol">hbase-protocol</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-protocol-shaded">hbase-protocol-shaded</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-replication">hbase-replication</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-resource-bundle">hbase-resource-bundle</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-rest">hbase-rest</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-rsgroup">hbase-rsgroup</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-server">hbase-server</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-shaded/hbase-shaded-client">hbase-shaded-client</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-shaded/hbase-shaded-client-byo-hadoop">hbase-shaded-client-byo-hadoop</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-shaded/hbase-shaded-mapreduce">hbase-shaded-mapreduce</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-shell">hbase-shell</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-thrift">hbase-thrift</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-build-configuration/hbase-zookeeper">hbase-zookeeper</a></td>
<td>3.0.0-SNAPSHOT</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase.thirdparty</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-shaded-miscellaneous">hbase-shaded-miscellaneous</a></td>
<td>2.2.1</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.hbase.thirdparty</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-shaded-netty">hbase-shaded-netty</a></td>
<td>2.2.1</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.hbase.thirdparty</td>
<td><a class="externalLink" href="http://hbase.apache.org/hbase-shaded-protobuf">hbase-shaded-protobuf</a></td>
<td>2.2.1</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.htrace</td>
<td><a class="externalLink" href="http://incubator.apache.org/projects/htrace.html">htrace-core4</a></td>
<td>4.2.0-incubating</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.httpcomponents</td>
<td><a class="externalLink" href="http://hc.apache.org/httpcomponents-client">httpclient</a></td>
<td>4.5.3</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.httpcomponents</td>
<td><a class="externalLink" href="http://hc.apache.org/httpcomponents-core-ga">httpcore</a></td>
<td>4.4.6</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.kerby</td>
<td><a class="externalLink" href="http://directory.apache.org/kerby/kerby-kerb/kerb-client">kerb-client</a></td>
<td>1.0.1</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.kerby</td>
<td><a class="externalLink" href="http://directory.apache.org/kerby/kerby-kerb/kerb-core">kerb-core</a></td>
<td>1.0.1</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.kerby</td>
<td><a class="externalLink" href="http://directory.apache.org/kerby/kerby-kerb/kerb-simplekdc">kerb-simplekdc</a></td>
<td>1.0.1</td>
<td>jar</td>
<td><a class="externalLink" href="https://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.thrift</td>
<td><a class="externalLink" href="http://thrift.apache.org">libthrift</a></td>
<td>0.12.0</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.apache.yetus</td>
<td><a class="externalLink" href="https://yetus.apache.org/audience-annotations">audience-annotations</a></td>
<td>0.5.0</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.apache.zookeeper</td>
<td>zookeeper</td>
<td>3.4.10</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0.txt">The Apache Software License, Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.codehaus.jettison</td>
<td><a class="externalLink" href="https://github.com/jettison-json/jettison">jettison</a></td>
<td>1.3.8</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-http</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-io</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-jmx</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-security</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-server</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-servlet</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-util</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-util-ajax</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.eclipse.jetty</td>
<td><a class="externalLink" href="http://www.eclipse.org/jetty">jetty-webapp</a></td>
<td>9.3.25.v20180904</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.apache.org/licenses/LICENSE-2.0">Apache Software License - Version 2.0</a>, <a class="externalLink" href="http://www.eclipse.org/org/documents/epl-v10.php">Eclipse Public License - Version 1.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.glassfish</td>
<td><a class="externalLink" href="http://uel.java.net">javax.el</a></td>
<td>3.0.1-b08</td>
<td>jar</td>
<td><a class="externalLink" href="https://glassfish.dev.java.net/nonav/public/CDDL+GPL.html">CDDL + GPLv2 with classpath exception</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.glassfish.jersey.containers</td>
<td><a class="externalLink" href="https://jersey.java.net/project/jersey-container-servlet-core/">jersey-container-servlet-core</a></td>
<td>2.25.1</td>
<td>jar</td>
<td><a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL+GPL License</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.glassfish.jersey.core</td>
<td><a class="externalLink" href="https://jersey.java.net/jersey-client/">jersey-client</a></td>
<td>2.25.1</td>
<td>jar</td>
<td><a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL+GPL License</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.glassfish.jersey.core</td>
<td><a class="externalLink" href="https://jersey.java.net/jersey-server/">jersey-server</a></td>
<td>2.25.1</td>
<td>jar</td>
<td><a class="externalLink" href="http://glassfish.java.net/public/CDDL+GPL_1_1.html">CDDL+GPL License</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.glassfish.web</td>
<td><a class="externalLink" href="http://jsp.java.net">javax.servlet.jsp</a></td>
<td>2.3.2</td>
<td>jar</td>
<td><a class="externalLink" href="http://glassfish.dev.java.net/nonav/public/CDDL+GPL.html">CDDL + GPLv2 with classpath exception</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.jamon</td>
<td><a class="externalLink" href="http://www.jamon.org/jamon-java-parent/jamon-runtime/">jamon-runtime</a></td>
<td>2.4.1</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.mozilla.org/MPL/2.0">Mozilla Public License Version 2.0</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.jruby</td>
<td><a class="externalLink" href="https://github.com/jruby/jruby/jruby-artifacts/jruby-complete">jruby-complete</a></td>
<td>9.1.17.0</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.gnu.org/licenses/gpl-2.0-standalone.html">GPL-2.0</a>, <a class="externalLink" href="http://www.gnu.org/licenses/lgpl-2.1-standalone.html">LGPL-2.1</a>, <a class="externalLink" href="http://www.eclipse.org/legal/epl-v20.html">EPL-2.0</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.jruby.jcodings</td>
<td><a class="externalLink" href="http://nexus.sonatype.org/oss-repository-hosting.html/jcodings">jcodings</a></td>
<td>1.0.18</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.jruby.joni</td>
<td><a class="externalLink" href="http://nexus.sonatype.org/oss-repository-hosting.html/joni">joni</a></td>
<td>2.1.11</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr>
-<tr class="b">
+<tr class="a">
<td>org.slf4j</td>
<td><a class="externalLink" href="http://www.slf4j.org">slf4j-api</a></td>
<td>1.7.25</td>
<td>jar</td>
<td><a class="externalLink" href="http://www.opensource.org/licenses/mit-license.php">MIT License</a></td></tr>
-<tr class="a">
+<tr class="b">
<td>org.slf4j</td>
<td><a class="externalLink" href="http://www.slf4j.org">slf4j-log4j12</a></td>
<td>1.7.25</td>
@@ -888,7 +894,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-03</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-05-04</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 0d8d065..a244c2c 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3927,7 +3927,7 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Fri May 3 14:34:30 UTC 2019"</code></td>
+<td class="colLast"><code>"Sat May 4 17:27:11 UTC 2019"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3941,7 +3941,7 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"fe48d5c5d2de4fe6b4e89d6da1c8038f"</code></td>
+<td class="colLast"><code>"4b63fe9b04e1c2cf4788ef56a264dc16"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
@@ -17216,6 +17216,39 @@
</li>
<li class="blockList">
<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureUtil</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.ProcedureUtil.DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS">
+<!-- -->
+</a><code>public static final long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS">DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></code></td>
+<td class="colLast"><code>1000L</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.ProcedureUtil.PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">
+<!-- -->
+</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</a></code></td>
+<td class="colLast"><code>"hbase.procedure.retry.max.sleep.time.ms"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.procedure2.ProcedureUtil.PROCEDURE_RETRY_SLEEP_INTERVAL_MS">
+<!-- -->
+</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_SLEEP_INTERVAL_MS">PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></code></td>
+<td class="colLast"><code>"hbase.procedure.retry.sleep.interval.ms"</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
<caption><span>org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher</a><<a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TEnv</a>,<a href="org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.html" title="type parameter in RemoteProcedureDispatcher">TRemote</a> exte [...]
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index c3a913a..fd2c9a6 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -4477,26 +4477,12 @@
<dd>
<div class="block">Check if we should attain safe point.</div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#attempt">attempt</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html#attempt">attempt</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionTransitionProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionTransitionProcedure</a></dt>
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#attempt">attempt</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
-<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#attempt">attempt</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ReopenTableRegionsProcedure</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/HBaseSaslRpcServer.html#attemptingUser">attemptingUser</a></span> - Variable in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/HBaseSaslRpcServer.html" title="class in org.apache.hadoop.hbase.security">HBaseSaslRpcServer</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#attempts">attempts</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">InitMetaProcedure</a></dt>
-<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#attempts">attempts</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">SplitWALProcedure</a></dt>
-<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#attempts">attempts</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">SwitchRpcThrottleProcedure</a></dt>
-<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></dt>
-<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RetryCounter.html#attempts">attempts</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html#attemptToOwnTask-boolean-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.ServerName-java.lang.String-int-">attemptToOwnTask(boolean, ZKWatcher, ServerName, String, int)</a></span> - Static method in class org.apache.hadoop.hbase.coordination.<a href="org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.html" title="class in org.apache.hadoop.hb [...]
@@ -21228,6 +21214,10 @@
<dd>
<div class="block">Create restore request.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#createRetryCounter-org.apache.hadoop.conf.Configuration-">createRetryCounter(Configuration)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureUtil</a></dt>
+<dd>
+<div class="block">Get a retry counter for getting the backoff time.</div>
+</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#createRoundRobinAssignProcedures-java.util.List-java.util.List-">createRoundRobinAssignProcedures(List<RegionInfo>, List<ServerName>)</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
<dd>
<div class="block">Create round-robin assigns.</div>
@@ -24164,6 +24154,10 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#DEFAULT_PRIORITY">DEFAULT_PRIORITY</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.CompactionChecker</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#DEFAULT_PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">DEFAULT_PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureUtil</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS">DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureUtil</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#DEFAULT_PROVIDER_ID">DEFAULT_PROVIDER_ID</a></span> - Static variable in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html" title="class in org.apache.hadoop.hbase.wal">AbstractFSWALProvider</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/impl/FastLongHistogram.html#DEFAULT_QUANTILES">DEFAULT_QUANTILES</a></span> - Static variable in class org.apache.hadoop.hbase.metrics.impl.<a href="org/apache/hadoop/hbase/metrics/impl/FastLongHistogram.html" title="class in org.apache.hadoop.hbase.metrics.impl">FastLongHistogram</a></dt>
@@ -35972,10 +35966,6 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RetryCounter.html#getBackoffTimeAndIncrementAttempts--">getBackoffTimeAndIncrementAttempts()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#getBackoffTimeMs-int-">getBackoffTimeMs(int)</a></span> - Static method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureUtil</a></dt>
-<dd>
-<div class="block">Get an exponential backoff time, in milliseconds.</div>
-</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/FileLink.html#getBackReferenceFileName-org.apache.hadoop.fs.Path-">getBackReferenceFileName(Path)</a></span> - Static method in class org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/FileLink.html" title="class in org.apache.hadoop.hbase.io">FileLink</a></dt>
<dd>
<div class="block">Get the referenced file name from the reference link directory path.</div>
@@ -88249,6 +88239,10 @@ service.</div>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a> - Enum in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureUtil</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_SLEEP_INTERVAL_MS">PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/ProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureUtil</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/procedure2/ProcedureAbortedException.html" title="class in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">ProcedureAbortedException</span></a> - Exception in <a href="org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></dt>
<dd>
<div class="block">Thrown when a procedure is aborted</div>
@@ -97273,6 +97267,8 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#resetReader--">resetReader()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry()</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#resetRSGroupAndTableMaps-java.util.Map-java.util.Map-">resetRSGroupAndTableMaps(Map<String, RSGroupInfo>, Map<TableName, String>)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl</a></dt>
<dd>
<div class="block">Make changes visible.</div>
@@ -98154,6 +98150,20 @@ service.</div>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/RetryCounterFactory.html#retryConfig">retryConfig</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/RetryCounterFactory.html" title="class in org.apache.hadoop.hbase.util">RetryCounterFactory</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">InitMetaProcedure</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ReopenTableRegionsProcedure</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">SplitWALProcedure</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">SwitchRpcThrottleProcedure</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/handler/AssignRegionHandler.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.handler.<a href="org/apache/hadoop/hbase/regionserver/handler/AssignRegionHandler.html" title="class in org.apache.hadoop.hbase.regionserver.handler">AssignRegionHandler</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/handler/UnassignRegionHandler.html#retryCounter">retryCounter</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.handler.<a href="org/apache/hadoop/hbase/regionserver/handler/UnassignRegionHandler.html" title="class in org.apache.hadoop.hbase.regionserver.handler">UnassignRegionHandler</a></dt>
@@ -114417,9 +114427,7 @@ service.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html#suspend--">suspend()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerImpl</a></dt>
<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#suspend-long-">suspend(long)</a></span> - Method in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">SplitWALProcedure</a></dt>
-<dd> </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-long-">suspend(long)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-org.apache.hadoop.conf.Configuration-java.util.function.LongConsumer-">suspend(Configuration, LongConsumer)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.UsedReplayWorkersForPeer.html#suspend-org.apache.hadoop.hbase.procedure2.Procedure-">suspend(Procedure<?>)</a></span> - Method in class org.apache.hadoop.hbase.master.replication.<a href="org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALManager.UsedReplayWorkersForPeer.html" title="class in org.apache.hadoop.hbase.master.replication">SyncReplication [...]
<dd> </dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index f629828..7c96111 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,10 +167,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index 9da7d9c..3e5035d 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -5329,7 +5329,7 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
</td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
+<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"><span class="typeNameLabel">SwitchRpcThrottleProcedure.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#serverName">serverName</a></span></code> </td>
</tr>
<tr class="altColor">
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 8ca4be1..ec4822e 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -549,23 +549,23 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
</ul>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 1ba06e3..3dfc629 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -189,13 +189,13 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index 611f4f2..26468e3 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -139,8 +139,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index f8f04c9..c911280 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -284,11 +284,11 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 148fecd..cb4ea86 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -354,8 +354,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 54e2658..92596b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -299,8 +299,8 @@
<ul>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
index 3b32ee3..3d9e508 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.55">RegionRemoteProcedureBase</a>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.56">RegionRemoteProcedureBase</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>>
implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a>, <a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html" title="interface in org.apache.hadoop.hbase.procedure2">RemoteProcedureDispatcher.RemoteProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterPro [...]
<div class="block">The base class for the remote procedures used to open/close a region.
@@ -172,17 +172,17 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#attempt">attempt</a></span></code> </td>
-</tr>
-<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#LOG">LOG</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#region">region</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code>private long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#seqId">seqId</a></span></code> </td>
@@ -429,7 +429,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.58">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.59">LOG</a></pre>
</li>
</ul>
<a name="region">
@@ -438,7 +438,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>region</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.60">region</a></pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.61">region</a></pre>
</li>
</ul>
<a name="targetServer">
@@ -447,7 +447,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>targetServer</h4>
-<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/master/assignment/RegionRemoteProcedureBase.html#line.62">targetServer</a></pre>
+<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/master/assignment/RegionRemoteProcedureBase.html#line.63">targetServer</a></pre>
</li>
</ul>
<a name="state">
@@ -456,7 +456,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>state</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionRemoteProcedureBaseState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.64">state</a></pre>
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionRemoteProcedureBaseState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.65">state</a></pre>
</li>
</ul>
<a name="transitionCode">
@@ -465,7 +465,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>transitionCode</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.67">transitionCode</a></pre>
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.68">transitionCode</a></pre>
</li>
</ul>
<a name="seqId">
@@ -474,16 +474,16 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>seqId</h4>
-<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.69">seqId</a></pre>
+<pre>private long <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.70">seqId</a></pre>
</li>
</ul>
-<a name="attempt">
+<a name="retryCounter">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>attempt</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.71">attempt</a></pre>
+<h4>retryCounter</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.72">retryCounter</a></pre>
</li>
</ul>
</li>
@@ -500,7 +500,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>RegionRemoteProcedureBase</h4>
-<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.73">RegionRemoteProcedureBase</a>()</pre>
+<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.74">RegionRemoteProcedureBase</a>()</pre>
</li>
</ul>
<a name="RegionRemoteProcedureBase-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">
@@ -509,7 +509,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockListLast">
<li class="blockList">
<h4>RegionRemoteProcedureBase</h4>
-<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.76">RegionRemoteProcedureBase</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> parent,
+<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.77">RegionRemoteProcedureBase</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> parent,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> targetServer)</pre>
</li>
@@ -528,7 +528,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>remoteOperationCompleted</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.84">remoteOperationCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.85">remoteOperationCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteOperationCompleted-TEnv-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">Called when RS tells the remote procedure is succeeded through the
<code>reportProcedureDone</code> method.</div>
@@ -544,7 +544,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>remoteOperationFailed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.90">remoteOperationFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.91">remoteOperationFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">RemoteProcedureException</a> error)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteOperationFailed-TEnv-org.apache.hadoop.hbase.procedure2.RemoteProcedureException-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">Called when RS tells the remote procedure is failed through the <code>reportProcedureDone</code>
@@ -561,7 +561,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getRegionNode</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.95">getRegionNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProced [...]
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.96">getRegionNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProced [...]
</li>
</ul>
<a name="remoteCallFailed-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.ServerName-java.io.IOException-">
@@ -570,7 +570,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>remoteCallFailed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.100">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.101">remoteCallFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> remote,
<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> exception)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#remoteCallFailed-TEnv-TRemote-java.io.IOException-">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
@@ -587,7 +587,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <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/master/assignment/RegionRemoteProcedureBase.html#line.130">getTableName</a>()</pre>
+<pre>public <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/master/assignment/RegionRemoteProcedureBase.html#line.131">getTableName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName--">getTableName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -602,7 +602,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>waitInitialized</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.135">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.136">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
call us to determine whether we need to wait for initialization, second, it will call
@@ -627,7 +627,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>rollback</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.146">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.147">rollback</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#rollback-TEnvironment-">Procedure</a></code></span></div>
@@ -654,7 +654,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>abort</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.151">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.152">abort</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#abort-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The abort() call is asynchronous and each procedure must decide how to deal
with it, if they want to be abortable. The simplest implementation
@@ -677,7 +677,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>reportTransition</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.156">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode,
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.157">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode transitionCode,
long seqId)
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>
@@ -693,7 +693,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>persistAndWake</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.161">persistAndWake</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.162">persistAndWake</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode)</pre>
</li>
</ul>
@@ -703,7 +703,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>reportTransition</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.167">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.168">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode transitionCode,
@@ -721,7 +721,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>serverCrashed</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.200">serverCrashed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.201">serverCrashed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)</pre>
</li>
@@ -732,7 +732,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>getParent</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.217">getParent</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.pr [...]
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.218">getParent</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.pr [...]
</li>
</ul>
<a name="unattach-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -741,7 +741,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>unattach</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.222">unattach</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.223">unattach</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
</li>
</ul>
<a name="updateTransition-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.master.assignment.RegionStateNode-org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode-long-">
@@ -750,7 +750,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>updateTransition</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.227">updateTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.228">updateTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode transitionCode,
long seqId)
@@ -767,7 +767,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.231">execute</a>(<a href=" [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.232">execute</a>(<a href=" [...]
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -798,7 +798,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>storeInDispatchedQueue</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.283">storeInDispatchedQueue</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.287">storeInDispatchedQueue</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/RemoteProcedureDispatcher.RemoteProcedure.html#storeInDispatchedQueue--">RemoteProcedureDispatcher.RemoteProcedure</a></code></span></div>
<div class="block">Whether store this remote procedure in dispatched queue
only OpenRegionProcedure and CloseRegionProcedure return false since they are
@@ -815,7 +815,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.288">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.292">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -837,7 +837,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.300">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.304">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -858,7 +858,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/T
<ul class="blockListLast">
<li class="blockList">
<h4>afterReplay</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.313">afterReplay</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#line.317">afterReplay</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Called when the procedure is ready to be added to the queue after
the loading/replay operation.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
index 6d7a978..5ef16cb 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.526">TransitRegionStateProcedure.TransitionType</a>
+<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.530">TransitRegionStateProcedure.TransitionType</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a>></pre>
</li>
</ul>
@@ -216,7 +216,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>ASSIGN</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.527">ASSIGN</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.531">ASSIGN</a></pre>
</li>
</ul>
<a name="UNASSIGN">
@@ -225,7 +225,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>UNASSIGN</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.527">UNASSIGN</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.531">UNASSIGN</a></pre>
</li>
</ul>
<a name="MOVE">
@@ -234,7 +234,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>MOVE</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.527">MOVE</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.531">MOVE</a></pre>
</li>
</ul>
<a name="REOPEN">
@@ -243,7 +243,7 @@ the order they are declared.</div>
<ul class="blockListLast">
<li class="blockList">
<h4>REOPEN</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.527">REOPEN</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html#line.531">REOPEN</a></pre>
</li>
</ul>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
index 6c7e921..8feb5b3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
@@ -134,7 +134,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.102">TransitRegionStateProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.103">TransitRegionStateProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineRegionProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineRegionProcedure</a><org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState></pre>
<div class="block">The procedure to deal with the state transition of a region. A region with a TRSP in place is
called RIT, i.e, RegionInTransition.
@@ -246,29 +246,29 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#assignCandidate">assignCandidate</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#attempt">attempt</a></span></code> </td>
-</tr>
-<tr class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#forceNewPlan">forceNewPlan</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#initialState">initialState</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#lastState">lastState</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#LOG">LOG</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#remoteProc">remoteProc</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#type">type</a></span></code> </td>
@@ -569,7 +569,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.105">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.106">LOG</a></pre>
</li>
</ul>
<a name="type">
@@ -578,7 +578,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>type</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.107">type</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.108">type</a></pre>
</li>
</ul>
<a name="initialState">
@@ -587,7 +587,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>initialState</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.109">initialState</a></pre>
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.110">initialState</a></pre>
</li>
</ul>
<a name="lastState">
@@ -596,7 +596,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>lastState</h4>
-<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.111">lastState</a></pre>
+<pre>private org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.112">lastState</a></pre>
</li>
</ul>
<a name="assignCandidate">
@@ -605,7 +605,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>assignCandidate</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/master/assignment/TransitRegionStateProcedure.html#line.114">assignCandidate</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/master/assignment/TransitRegionStateProcedure.html#line.115">assignCandidate</a></pre>
</li>
</ul>
<a name="forceNewPlan">
@@ -614,16 +614,16 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>forceNewPlan</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.116">forceNewPlan</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.117">forceNewPlan</a></pre>
</li>
</ul>
-<a name="attempt">
+<a name="retryCounter">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
-<h4>attempt</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.118">attempt</a></pre>
+<h4>retryCounter</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.119">retryCounter</a></pre>
</li>
</ul>
<a name="remoteProc">
@@ -632,7 +632,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>remoteProc</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.120">remoteProc</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.121">remoteProc</a></pre>
</li>
</ul>
</li>
@@ -649,7 +649,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>TransitRegionStateProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.122">TransitRegionStateProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.123">TransitRegionStateProcedure</a>()</pre>
</li>
</ul>
<a name="TransitRegionStateProcedure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-boolean-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure.TransitionType-">
@@ -658,7 +658,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>TransitRegionStateProcedure</h4>
-<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.146">TransitRegionStateProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.147">TransitRegionStateProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> hri,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> assignCandidate,
boolean forceNewPlan,
@@ -679,7 +679,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>setInitalAndLastState</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.125">setInitalAndLastState</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.126">setInitalAndLastState</a>()</pre>
</li>
</ul>
<a name="getTableOperationType--">
@@ -688,7 +688,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getTableOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.156">getTableOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.157">getTableOperationType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
<div class="block">Given an operation type we can take decisions about what to do with pending operations.
e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -709,7 +709,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>waitInitialized</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.162">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.163">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
call us to determine whether we need to wait for initialization, second, it will call
@@ -734,7 +734,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>queueAssign</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.172">queueAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.173">queueAssign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
<dl>
@@ -749,7 +749,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>openRegion</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.197">openRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.198">openRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode)
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>
@@ -764,7 +764,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>confirmOpened</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.210">confirmOpened</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Ma [...]
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.211">confirmOpened</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Ma [...]
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode)
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>
@@ -779,7 +779,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>closeRegion</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.257">closeRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.258">closeRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode)
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>
@@ -794,7 +794,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>confirmClosed</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.271">confirmClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Ma [...]
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.272">confirmClosed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Ma [...]
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode)
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>
@@ -809,7 +809,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.311">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.312">execute</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -840,7 +840,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getRegionStateNode</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.323">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Mast [...]
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.324">getRegionStateNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Mast [...]
</li>
</ul>
<a name="executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState-">
@@ -849,7 +849,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.328">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedur [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.329">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedur [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -876,7 +876,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>setTimeoutFailure</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.366">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.370">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block">At end of timeout, wake ourselves up so we run again.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -893,7 +893,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>reportTransition</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.373">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.377">reportTransition</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode code,
@@ -912,7 +912,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>serverCrashed</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.395">serverCrashed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.399">serverCrashed</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionStateNode.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStateNode</a> regionNode,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName)
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>
@@ -928,7 +928,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>attachRemoteProc</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.406">attachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a> proc)</pre>
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.410">attachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a> proc)</pre>
</li>
</ul>
<a name="unattachRemoteProc-org.apache.hadoop.hbase.master.assignment.RegionRemoteProcedureBase-">
@@ -937,7 +937,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>unattachRemoteProc</h4>
-<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.410">unattachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a> proc)</pre>
+<pre>void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.414">unattachRemoteProc</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionRemoteProcedureBase</a> proc)</pre>
</li>
</ul>
<a name="rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState-">
@@ -946,7 +946,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.416">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.420">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -968,7 +968,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.423">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.427">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -987,7 +987,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.428">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.432">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -1006,7 +1006,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.433">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.437">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -1023,7 +1023,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>convert</h4>
-<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.437">convert</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType type)</pre>
+<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.441">convert</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType type)</pre>
</li>
</ul>
<a name="convert-org.apache.hadoop.hbase.master.assignment.TransitRegionStateProcedure.TransitionType-">
@@ -1032,7 +1032,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>convert</h4>
-<pre>private static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.452">convert</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> type)</pre>
+<pre>private static org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.456">convert</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure.TransitionType</a> type)</pre>
</li>
</ul>
<a name="serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
@@ -1041,7 +1041,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.468">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.472">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -1063,7 +1063,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.479">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.483">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -1084,7 +1084,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getProcedureMetrics</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.492">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureMetrics.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.496">getProcedureMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#getProcedureMetrics-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Override this method to provide procedure specific counters for submitted count, failed
count and time histogram.</div>
@@ -1104,7 +1104,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>toStringClassDetails</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.509">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.513">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
<div class="block">Extend the toString() information with the procedure details
e.g. className and parameters</div>
@@ -1122,7 +1122,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>setOwner</h4>
-<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.520">setOwner</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.m [...]
+<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.524">setOwner</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.m [...]
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> proc)</pre>
</li>
</ul>
@@ -1132,7 +1132,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>assign</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.533">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.537">assign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region,
@Nullable
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> targetServer)</pre>
@@ -1144,7 +1144,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>unassign</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.539">unassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.ma [...]
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.543">unassign</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.ma [...]
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</pre>
</li>
</ul>
@@ -1154,7 +1154,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>reopen</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.544">reopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.548">reopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.mast [...]
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region)</pre>
</li>
</ul>
@@ -1164,7 +1164,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>move</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.549">move</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master [...]
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#line.553">move</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master [...]
<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a> region,
@Nullable
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> targetServer)</pre>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index f63d55a..e0b322d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -148,8 +148,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 848d41f..c49c655 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -198,8 +198,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index fc32bd3..2610df5 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -355,11 +355,11 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html
index 3520c1d..a32a2a3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html
@@ -129,7 +129,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.48">InitMetaProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.49">InitMetaProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineTableProcedure</a><org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState></pre>
<div class="block">This procedure is used to initialize meta table for a new hbase deploy. It will just schedule an
<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment"><code>TransitRegionStateProcedure</code></a> to assign meta.</div>
@@ -181,17 +181,17 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#attempts">attempts</a></span></code> </td>
-</tr>
-<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#latch">latch</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#LOG">LOG</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -380,7 +380,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.50">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.51">LOG</a></pre>
</li>
</ul>
<a name="latch">
@@ -389,16 +389,16 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>latch</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.52">latch</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.53">latch</a></pre>
</li>
</ul>
-<a name="attempts">
+<a name="retryCounter">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>attempts</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.54">attempts</a></pre>
+<h4>retryCounter</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.55">retryCounter</a></pre>
</li>
</ul>
</li>
@@ -415,7 +415,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>InitMetaProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.48">InitMetaProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.49">InitMetaProcedure</a>()</pre>
</li>
</ul>
</li>
@@ -432,7 +432,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <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/master/procedure/InitMetaProcedure.html#line.57">getTableName</a>()</pre>
+<pre>public <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/master/procedure/InitMetaProcedure.html#line.58">getTableName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName--">getTableName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -449,7 +449,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getTableOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.62">getTableOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.63">getTableOperationType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
<div class="block">Given an operation type we can take decisions about what to do with pending operations.
e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -470,7 +470,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.67">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.68">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -497,7 +497,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>waitInitialized</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.102">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.106">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
call us to determine whether we need to wait for initialization, second, it will call
@@ -522,7 +522,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>setTimeoutFailure</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.108">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.112">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.
<p/>
@@ -547,7 +547,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>acquireLock</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.115">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>  [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2">Procedure.LockState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.119">acquireLock</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>  [...]
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#acquireLock-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The user should override this method if they need a lock on an Entity. A lock can be anything,
and it is up to the implementor. The Procedure Framework will call this method just before it
@@ -584,7 +584,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.123">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.127">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -606,7 +606,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.129">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.133">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -625,7 +625,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.134">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.138">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -644,7 +644,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.139">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.143">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -661,7 +661,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.144">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.148">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -683,7 +683,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.150">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.154">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -704,7 +704,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>completionCleanup</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.156">completionCleanup</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.160">completionCleanup</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#completionCleanup-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Called when the procedure is marked as completed (success or rollback).
The procedure implementor may use this method to cleanup in-memory states.
@@ -722,7 +722,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>await</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.160">await</a>()
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#line.164">await</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html
index 7869d31..049df9e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html
@@ -129,7 +129,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.45">ReopenTableRegionsProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.46">ReopenTableRegionsProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineTableProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">AbstractStateMachineTableProcedure</a><org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState></pre>
<div class="block">Used for reopening the regions for a table.</div>
</li>
@@ -180,17 +180,17 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#attempt">attempt</a></span></code> </td>
-</tr>
-<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#LOG">LOG</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<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/master/procedure/ReopenTableRegionsProcedure.html#regions">regions</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
<tr class="rowColor">
<td class="colFirst"><code>private <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/master/procedure/ReopenTableRegionsProcedure.html#tableName">tableName</a></span></code> </td>
@@ -367,7 +367,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.48">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.49">LOG</a></pre>
</li>
</ul>
<a name="tableName">
@@ -376,7 +376,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>tableName</h4>
-<pre>private <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/master/procedure/ReopenTableRegionsProcedure.html#line.50">tableName</a></pre>
+<pre>private <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/master/procedure/ReopenTableRegionsProcedure.html#line.51">tableName</a></pre>
</li>
</ul>
<a name="regions">
@@ -385,16 +385,16 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>regions</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<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/master/procedure/ReopenTableRegionsProcedure.html#line.52">regions</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<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/master/procedure/ReopenTableRegionsProcedure.html#line.53">regions</a></pre>
</li>
</ul>
-<a name="attempt">
+<a name="retryCounter">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>attempt</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.54">attempt</a></pre>
+<h4>retryCounter</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.55">retryCounter</a></pre>
</li>
</ul>
</li>
@@ -411,7 +411,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>ReopenTableRegionsProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.56">ReopenTableRegionsProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.57">ReopenTableRegionsProcedure</a>()</pre>
</li>
</ul>
<a name="ReopenTableRegionsProcedure-org.apache.hadoop.hbase.TableName-">
@@ -420,7 +420,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>ReopenTableRegionsProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.59">ReopenTableRegionsProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.60">ReopenTableRegionsProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tableName)</pre>
</li>
</ul>
</li>
@@ -437,7 +437,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getTableName</h4>
-<pre>public <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/master/procedure/ReopenTableRegionsProcedure.html#line.64">getTableName</a>()</pre>
+<pre>public <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/master/procedure/ReopenTableRegionsProcedure.html#line.65">getTableName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableName--">getTableName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface</a></code></dd>
@@ -454,7 +454,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getTableOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.69">getTableOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">TableProcedureInterface.TableOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.70">getTableOperationType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.html#getTableOperationType--">TableProcedureInterface</a></code></span></div>
<div class="block">Given an operation type we can take decisions about what to do with pending operations.
e.g. if we get a delete and we have some table operation pending (e.g. add column)
@@ -475,7 +475,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>canSchedule</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.73">canSchedule</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.74">canSchedule</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a> loc)</pre>
</li>
</ul>
@@ -485,7 +485,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.86">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure" [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.87">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure" [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -512,7 +512,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>setTimeoutFailure</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.152">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.156">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block">At end of timeout, wake ourselves up so we run again.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
@@ -529,7 +529,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.159">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.163">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -551,7 +551,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.165">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.169">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -570,7 +570,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.170">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.174">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -589,7 +589,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.175">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.179">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -606,7 +606,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.180">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.184">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -628,7 +628,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Abst
<ul class="blockListLast">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.189">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#line.193">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html
index f211bd3..14cd4aa 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.49">SplitWALProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.50">SplitWALProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState>
implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></pre>
<div class="block">The procedure is to split a WAL. It will get an available region server and
@@ -180,17 +180,17 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#attempts">attempts</a></span></code> </td>
-</tr>
-<tr class="rowColor">
<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/master/procedure/SplitWALProcedure.html#crashedServer">crashedServer</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#LOG">LOG</a></span></code> </td>
</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
<tr 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/master/procedure/SplitWALProcedure.html#walPath">walPath</a></span></code> </td>
@@ -330,10 +330,6 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.</div>
</td>
</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#suspend-long-">suspend</a></span>(long backoff)</code> </td>
-</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -376,7 +372,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.52">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.53">LOG</a></pre>
</li>
</ul>
<a name="walPath">
@@ -385,7 +381,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>walPath</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/master/procedure/SplitWALProcedure.html#line.53">walPath</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/master/procedure/SplitWALProcedure.html#line.54">walPath</a></pre>
</li>
</ul>
<a name="worker">
@@ -394,7 +390,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>worker</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/master/procedure/SplitWALProcedure.html#line.54">worker</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/master/procedure/SplitWALProcedure.html#line.55">worker</a></pre>
</li>
</ul>
<a name="crashedServer">
@@ -403,16 +399,16 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>crashedServer</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/master/procedure/SplitWALProcedure.html#line.55">crashedServer</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/master/procedure/SplitWALProcedure.html#line.56">crashedServer</a></pre>
</li>
</ul>
-<a name="attempts">
+<a name="retryCounter">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>attempts</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.56">attempts</a></pre>
+<h4>retryCounter</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.57">retryCounter</a></pre>
</li>
</ul>
</li>
@@ -429,7 +425,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>SplitWALProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.58">SplitWALProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.59">SplitWALProcedure</a>()</pre>
</li>
</ul>
<a name="SplitWALProcedure-java.lang.String-org.apache.hadoop.hbase.ServerName-">
@@ -438,7 +434,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockListLast">
<li class="blockList">
<h4>SplitWALProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.61">SplitWALProcedure</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> walPath,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.62">SplitWALProcedure</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> walPath,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> crashedServer)</pre>
</li>
</ul>
@@ -456,7 +452,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.67">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.68">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterPro [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -483,7 +479,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.105">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.111">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState splitOneWalState)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -505,7 +501,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.115">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.121">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -524,7 +520,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.120">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.126">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -543,7 +539,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.125">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SplitWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.131">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -560,7 +556,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.130">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.136">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -582,7 +578,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.142">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.148">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -603,7 +599,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>setTimeoutFailure</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.154">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.160">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.
<p/>
@@ -622,27 +618,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
</dl>
</li>
</ul>
-<a name="suspend-long-">
-<!-- -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>suspend</h4>
-<pre>protected final <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.160">suspend</a>(long backoff)
- throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
-<dl>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code></dd>
-</dl>
-</li>
-</ul>
<a name="getWAL--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getWAL</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/master/procedure/SplitWALProcedure.html#line.169">getWAL</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/master/procedure/SplitWALProcedure.html#line.166">getWAL</a>()</pre>
</li>
</ul>
<a name="getWorker--">
@@ -651,7 +633,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getWorker</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/master/procedure/SplitWALProcedure.html#line.174">getWorker</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/master/procedure/SplitWALProcedure.html#line.171">getWorker</a>()</pre>
</li>
</ul>
<a name="getServerName--">
@@ -660,7 +642,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<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/master/procedure/SplitWALProcedure.html#line.179">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/master/procedure/SplitWALProcedure.html#line.176">getServerName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#getServerName--">getServerName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></code></dd>
@@ -675,7 +657,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>hasMetaTableRegion</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.184">hasMetaTableRegion</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.181">hasMetaTableRegion</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#hasMetaTableRegion--">hasMetaTableRegion</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></code></dd>
@@ -690,7 +672,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getServerOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface.ServerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.189">getServerOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface.ServerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.186">getServerOperationType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#getServerOperationType--">ServerProcedureInterface</a></code></span></div>
<div class="block">Given an operation type we can take decisions about what to do with pending operations.
e.g. if we get a crash handler and we have some assignment operation pending
@@ -709,7 +691,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockListLast">
<li class="blockList">
<h4>afterReplay</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.194">afterReplay</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#line.191">afterReplay</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Called when the procedure is ready to be added to the queue after
the loading/replay operation.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html
index 09dd917..657a478 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.40">SwitchRpcThrottleProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.41">SwitchRpcThrottleProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState>
implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></pre>
<div class="block">The procedure to switch rpc throttle</div>
@@ -176,27 +176,27 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>(package private) int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#attempts">attempts</a></span></code> </td>
-</tr>
-<tr class="rowColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#LOG">LOG</a></span></code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
<tr class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#rpcThrottleEnabled">rpcThrottleEnabled</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#rpcThrottleStorage">rpcThrottleStorage</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a></code></td>
+<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/master/procedure/SwitchRpcThrottleProcedure.html#serverName">serverName</a></span></code> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#syncLatch">syncLatch</a></span></code> </td>
</tr>
</table>
@@ -369,7 +369,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.44">LOG</a></pre>
+<pre>private static org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.45">LOG</a></pre>
</li>
</ul>
<a name="rpcThrottleStorage">
@@ -378,7 +378,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>rpcThrottleStorage</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.46">rpcThrottleStorage</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.47">rpcThrottleStorage</a></pre>
</li>
</ul>
<a name="rpcThrottleEnabled">
@@ -387,7 +387,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>rpcThrottleEnabled</h4>
-<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.47">rpcThrottleEnabled</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.48">rpcThrottleEnabled</a></pre>
</li>
</ul>
<a name="syncLatch">
@@ -396,7 +396,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>syncLatch</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.48">syncLatch</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.49">syncLatch</a></pre>
</li>
</ul>
<a name="serverName">
@@ -405,16 +405,16 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>serverName</h4>
-<pre><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/master/procedure/SwitchRpcThrottleProcedure.html#line.49">serverName</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/master/procedure/SwitchRpcThrottleProcedure.html#line.50">serverName</a></pre>
</li>
</ul>
-<a name="attempts">
+<a name="retryCounter">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>attempts</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.50">attempts</a></pre>
+<h4>retryCounter</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.51">retryCounter</a></pre>
</li>
</ul>
</li>
@@ -431,7 +431,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>SwitchRpcThrottleProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.52">SwitchRpcThrottleProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.53">SwitchRpcThrottleProcedure</a>()</pre>
</li>
</ul>
<a name="SwitchRpcThrottleProcedure-org.apache.hadoop.hbase.quotas.RpcThrottleStorage-boolean-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch-">
@@ -440,7 +440,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockListLast">
<li class="blockList">
<h4>SwitchRpcThrottleProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.55">SwitchRpcThrottleProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a> rpcThrottleStorage,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.56">SwitchRpcThrottleProcedure</a>(<a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a> rpcThrottleStorage,
boolean rpcThrottleEnabled,
<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> serverName,
<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a> syncLatch)</pre>
@@ -460,7 +460,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.64">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure"> [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.65">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure"> [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureYieldException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureYieldException</a>,
@@ -487,7 +487,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.98">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.102">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -509,7 +509,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.103">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.107">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -528,7 +528,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.108">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState throttleState)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.112">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState throttleState)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -547,7 +547,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.113">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.117">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -564,7 +564,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getCurrentState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.118">getCurrentState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.122">getCurrentState</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getCurrentState--">getCurrentState</a></code> in class <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure"> [...]
@@ -577,7 +577,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.123">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.127">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -599,7 +599,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.130">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.134">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -620,7 +620,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<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/master/procedure/SwitchRpcThrottleProcedure.html#line.137">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/master/procedure/SwitchRpcThrottleProcedure.html#line.141">getServerName</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#getServerName--">getServerName</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></code></dd>
@@ -635,7 +635,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>hasMetaTableRegion</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.142">hasMetaTableRegion</a>()</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.146">hasMetaTableRegion</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#hasMetaTableRegion--">hasMetaTableRegion</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface</a></code></dd>
@@ -650,7 +650,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>getServerOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface.ServerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.147">getServerOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">ServerProcedureInterface.ServerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.151">getServerOperationType</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from interface: <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.html#getServerOperationType--">ServerProcedureInterface</a></code></span></div>
<div class="block">Given an operation type we can take decisions about what to do with pending operations.
e.g. if we get a crash handler and we have some assignment operation pending
@@ -669,7 +669,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockList">
<li class="blockList">
<h4>switchThrottleState</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.151">switchThrottleState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.155">switchThrottleState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
boolean rpcThrottleEnabled)
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>
@@ -684,7 +684,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/S
<ul class="blockListLast">
<li class="blockList">
<h4>toStringClassDetails</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.157">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#line.161">toStringClassDetails</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a> sb)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#toStringClassDetails-java.lang.StringBuilder-">Procedure</a></code></span></div>
<div class="block">Extend the toString() information with the procedure details
e.g. className and parameters</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
index f8424ef..75dae2f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/class-use/ProcedurePrepareLatch.html
@@ -192,7 +192,7 @@
<td class="colLast"><span class="typeNameLabel">AbstractStateMachineNamespaceProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/AbstractStateMachineNamespaceProcedure.html#syncLatch">syncLatch</a></span></code> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/ProcedurePrepareLatch.html" title="class in org.apache.hadoop.hbase.master.procedure">ProcedurePrepareLatch</a></code></td>
<td class="colLast"><span class="typeNameLabel">SwitchRpcThrottleProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#syncLatch">syncLatch</a></span></code> </td>
</tr>
</tbody>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 5c4442f..11171cd 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -216,8 +216,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html
index 8e5f45e..461656b 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -128,7 +128,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.36">AbstractPeerNoLockProcedure</a><TState>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.40">AbstractPeerNoLockProcedure</a><TState>
extends <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html" title="class in org.apache.hadoop.hbase.procedure2">StateMachineProcedure</a><<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a>,TState>
implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></pre>
<div class="block">Base class for replication peer related procedures which do not need to hold locks(for most of
@@ -181,13 +181,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
-<td class="colFirst"><code>protected int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a></span></code> </td>
-</tr>
-<tr 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/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></span></code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -253,29 +253,34 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a></span>()</code> </td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="type parameter in AbstractPeerNoLockProcedure">TState</a> state)</code>
<div class="block">called to perform the rollback of the specified state</div>
</td>
</tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
<td class="colFirst"><code>protected void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">serializeStateData</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)</code>
<div class="block">The user-level code of the procedure may have some state to
persist (e.g.</div>
</td>
</tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setTimeoutFailure</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.</div>
</td>
</tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-long-">suspend</a></span>(long backoff)</code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-org.apache.hadoop.conf.Configuration-java.util.function.LongConsumer-">suspend</a></span>(org.apache.hadoop.conf.Configuration conf,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/LongConsumer.html?is-external=true" title="class or interface in java.util.function">LongConsumer</a> backoffConsumer)</code> </td>
</tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
<td class="colFirst"><code>protected boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#waitInitialized-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">waitInitialized</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</code>
<div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
@@ -332,16 +337,16 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>peerId</h4>
-<pre>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> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.39">peerId</a></pre>
+<pre>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> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.43">peerId</a></pre>
</li>
</ul>
-<a name="attempts">
+<a name="retryCounter">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>attempts</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.41">attempts</a></pre>
+<h4>retryCounter</h4>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.45">retryCounter</a></pre>
</li>
</ul>
</li>
@@ -358,7 +363,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>AbstractPeerNoLockProcedure</h4>
-<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.43">AbstractPeerNoLockProcedure</a>()</pre>
+<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.47">AbstractPeerNoLockProcedure</a>()</pre>
</li>
</ul>
<a name="AbstractPeerNoLockProcedure-java.lang.String-">
@@ -367,7 +372,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockListLast">
<li class="blockList">
<h4>AbstractPeerNoLockProcedure</h4>
-<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.46">AbstractPeerNoLockProcedure</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> peerId)</pre>
+<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.50">AbstractPeerNoLockProcedure</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> peerId)</pre>
</li>
</ul>
</li>
@@ -384,7 +389,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>getPeerId</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/master/replication/AbstractPeerNoLockProcedure.html#line.51">getPeerId</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/master/replication/AbstractPeerNoLockProcedure.html#line.55">getPeerId</a>()</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
<dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html#getPeerId--">getPeerId</a></code> in interface <code><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.html" title="interface in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface</a></code></dd>
@@ -397,7 +402,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>waitInitialized</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.56">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.60">waitInitialized</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#waitInitialized-TEnvironment-">Procedure</a></code></span></div>
<div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#doAcquireLock-TEnvironment-org.apache.hadoop.hbase.procedure2.store.ProcedureStore-"><code>Procedure.doAcquireLock(Object, ProcedureStore)</code></a> will be split into two steps, first, it will
call us to determine whether we need to wait for initialization, second, it will call
@@ -424,7 +429,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.61">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.65">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="type parameter in AbstractPeerNoLockProcedure">TState</a> state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -446,7 +451,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.72">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.76">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -468,7 +473,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.78">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.82">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -489,7 +494,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<ul class="blockList">
<li class="blockList">
<h4>setTimeoutFailure</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.84">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.88">setTimeoutFailure</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#setTimeoutFailure-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Called by the ProcedureExecutor when the timeout set by setTimeout() is expired.
<p/>
@@ -508,13 +513,14 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
</dl>
</li>
</ul>
-<a name="suspend-long-">
+<a name="suspend-org.apache.hadoop.conf.Configuration-java.util.function.LongConsumer-">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>suspend</h4>
-<pre>protected final <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.90">suspend</a>(long backoff)
+<pre>protected final <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.94">suspend</a>(org.apache.hadoop.conf.Configuration conf,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/LongConsumer.html?is-external=true" title="class or interface in java.util.function">LongConsumer</a> backoffConsumer)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -522,6 +528,15 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
</dl>
</li>
</ul>
+<a name="resetRetry--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>resetRetry</h4>
+<pre>protected final void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#line.107">resetRetry</a>()</pre>
+</li>
+</ul>
</li>
</ul>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
index 6907799..6ec4a1d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html
@@ -206,7 +206,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -319,7 +319,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/P
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.ma [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href=". [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
index c60ab40..7cac989 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/AddPeerProcedure.html
@@ -214,7 +214,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -345,7 +345,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.maste [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
index a5b6945..4b53373 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/DisablePeerProcedure.html
@@ -206,7 +206,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -310,7 +310,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.maste [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
index 017bff4..61f27d0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/EnablePeerProcedure.html
@@ -206,7 +206,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -310,7 +310,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.maste [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index 0137bf5..5561b40 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
@@ -138,7 +138,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.48">ModifyPeerProcedure</a>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.47">ModifyPeerProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a><org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState></pre>
<div class="block">The base class for all replication peer related procedure except sync replication state
transition.</div>
@@ -206,7 +206,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -351,7 +351,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.ma [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">deserializeStateData</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href=". [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -401,7 +401,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.50">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.49">LOG</a></pre>
</li>
</ul>
</li>
@@ -418,7 +418,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>ModifyPeerProcedure</h4>
-<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.52">ModifyPeerProcedure</a>()</pre>
+<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.51">ModifyPeerProcedure</a>()</pre>
</li>
</ul>
<a name="ModifyPeerProcedure-java.lang.String-">
@@ -427,7 +427,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>ModifyPeerProcedure</h4>
-<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.55">ModifyPeerProcedure</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> peerId)</pre>
+<pre>protected <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.54">ModifyPeerProcedure</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> peerId)</pre>
</li>
</ul>
</li>
@@ -444,7 +444,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>prePeerModification</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.66">prePeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.65">prePeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -467,7 +467,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>updatePeerStorage</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.69">updatePeerStorage</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.68">updatePeerStorage</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -481,7 +481,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>postPeerModification</h4>
-<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.80">postPeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected abstract void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.79">postPeerModification</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<div class="block">Called before we finish the procedure. The implementation can do some logging work, and also
@@ -504,7 +504,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>releaseLatch</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.83">releaseLatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.82">releaseLatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
</li>
</ul>
<a name="nextStateAfterRefresh--">
@@ -513,7 +513,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>nextStateAfterRefresh</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.91">nextStateAfterRefresh</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.90">nextStateAfterRefresh</a>()</pre>
<div class="block">Implementation class can override this method. By default we will jump to
POST_PEER_MODIFICATION and finish the procedure.</div>
</li>
@@ -524,7 +524,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>enablePeerBeforeFinish</h4>
-<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.99">enablePeerBeforeFinish</a>()</pre>
+<pre>protected boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.98">enablePeerBeforeFinish</a>()</pre>
<div class="block">The implementation class should override this method if the procedure may enter the serial
related states.</div>
</li>
@@ -535,7 +535,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getOldPeerConfig</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.103">getOldPeerConfig</a>()</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.102">getOldPeerConfig</a>()</pre>
</li>
</ul>
<a name="getNewPeerConfig--">
@@ -544,7 +544,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getNewPeerConfig</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.107">getNewPeerConfig</a>()</pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.106">getNewPeerConfig</a>()</pre>
</li>
</ul>
<a name="updateLastPushedSequenceIdForSerialPeer-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -553,7 +553,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>updateLastPushedSequenceIdForSerialPeer</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.111">updateLastPushedSequenceIdForSerialPeer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.110">updateLastPushedSequenceIdForSerialPeer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<dl>
@@ -569,7 +569,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>needReopen</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.118">needReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> tsm,
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.117">needReopen</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/TableStateManager.html" title="class in org.apache.hadoop.hbase.master">TableStateManager</a> tsm,
<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> tn)
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>
@@ -584,7 +584,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>reopenRegions</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.139">reopenRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.138">reopenRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
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>
@@ -598,7 +598,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.162">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Mast [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.161">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">Mast [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -623,7 +623,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.260">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.254">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -642,7 +642,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.265">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.259">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -661,7 +661,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.270">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html#line.264">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/RecoverStandbyProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/RecoverStandbyProcedure.html
index eac0c95..4ec76b1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/RecoverStandbyProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/RecoverStandbyProcedure.html
@@ -194,7 +194,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -305,7 +305,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.maste [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
index 4a742d1..d9be3bc 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/RemovePeerProcedure.html
@@ -210,7 +210,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -318,7 +318,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.maste [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html
index b35e6cb..d83c6b3 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html
@@ -129,7 +129,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.41">SyncReplicationReplayWALProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.40">SyncReplicationReplayWALProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a><org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState></pre>
<div class="block">The procedure for replaying a set of remote wals. It will get an available region server and
schedule a <a href="../../../../../../org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALRemoteProcedure.html" title="class in org.apache.hadoop.hbase.master.replication"><code>SyncReplicationReplayWALRemoteProcedure</code></a> to actually send the request to region
@@ -199,7 +199,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -313,7 +313,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setTimeoutFailure</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-long-">suspend</a>, <a href="../../../ [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">setTimeoutFailure</a>, <a href="../../. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -356,7 +356,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.44">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.43">LOG</a></pre>
</li>
</ul>
<a name="worker">
@@ -365,7 +365,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>worker</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/master/replication/SyncReplicationReplayWALProcedure.html#line.47">worker</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/master/replication/SyncReplicationReplayWALProcedure.html#line.46">worker</a></pre>
</li>
</ul>
<a name="wals">
@@ -374,7 +374,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>wals</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="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/master/replication/SyncReplicationReplayWALProcedure.html#line.49">wals</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a><<a href="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/master/replication/SyncReplicationReplayWALProcedure.html#line.48">wals</a></pre>
</li>
</ul>
</li>
@@ -391,7 +391,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>SyncReplicationReplayWALProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.51">SyncReplicationReplayWALProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.50">SyncReplicationReplayWALProcedure</a>()</pre>
</li>
</ul>
<a name="SyncReplicationReplayWALProcedure-java.lang.String-java.util.List-">
@@ -400,7 +400,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>SyncReplicationReplayWALProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.54">SyncReplicationReplayWALProcedure</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> peerId,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.53">SyncReplicationReplayWALProcedure</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> peerId,
<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="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>> wals)</pre>
</li>
</ul>
@@ -418,7 +418,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.60">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.pr [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.59">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.pr [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#executeFromState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
@@ -441,7 +441,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>rollbackState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.97">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.95">rollbackState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env,
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState state)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -463,7 +463,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.106">getState</a>(int state)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.104">getState</a>(int state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -482,7 +482,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.111">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.109">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -501,7 +501,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.116">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.114">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -518,7 +518,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.121">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.119">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -540,7 +540,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.132">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.130">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -561,7 +561,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getPeerOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.144">getPeerOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.142">getPeerOperationType</a>()</pre>
</li>
</ul>
<a name="afterReplay-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -570,7 +570,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>afterReplay</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.149">afterReplay</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html#line.147">afterReplay</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#afterReplay-TEnvironment-">Procedure</a></code></span></div>
<div class="block">Called when the procedure is ready to be added to the queue after
the loading/replay operation.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
index 30e0aa3..3638964 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
@@ -134,7 +134,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.49">TransitPeerSyncReplicationStateProcedure</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.48">TransitPeerSyncReplicationStateProcedure</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerProcedure</a><org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState></pre>
<div class="block">The procedure for transit current sync replication state for a synchronous replication peer.</div>
</li>
@@ -217,7 +217,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -364,7 +364,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.maste [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -414,7 +414,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.52">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.51">LOG</a></pre>
</li>
</ul>
<a name="fromState">
@@ -423,7 +423,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>fromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.55">fromState</a></pre>
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.54">fromState</a></pre>
</li>
</ul>
<a name="toState">
@@ -432,7 +432,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>toState</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.57">toState</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.56">toState</a></pre>
</li>
</ul>
<a name="enabled">
@@ -441,7 +441,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>enabled</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.59">enabled</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.58">enabled</a></pre>
</li>
</ul>
<a name="serial">
@@ -450,7 +450,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>serial</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.61">serial</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.60">serial</a></pre>
</li>
</ul>
</li>
@@ -467,7 +467,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>TransitPeerSyncReplicationStateProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.63">TransitPeerSyncReplicationStateProcedure</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.62">TransitPeerSyncReplicationStateProcedure</a>()</pre>
</li>
</ul>
<a name="TransitPeerSyncReplicationStateProcedure-java.lang.String-org.apache.hadoop.hbase.replication.SyncReplicationState-">
@@ -476,7 +476,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>TransitPeerSyncReplicationStateProcedure</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.66">TransitPeerSyncReplicationStateProcedure</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> peerId,
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.65">TransitPeerSyncReplicationStateProcedure</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> peerId,
<a href="../../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication">SyncReplicationState</a> state)</pre>
</li>
</ul>
@@ -494,7 +494,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getPeerOperationType</h4>
-<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.72">getPeerOperationType</a>()</pre>
+<pre>public <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure">PeerProcedureInterface.PeerOperationType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.71">getPeerOperationType</a>()</pre>
</li>
</ul>
<a name="serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">
@@ -503,7 +503,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>serializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.77">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.76">serializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#serializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">The user-level code of the procedure may have some state to
@@ -525,7 +525,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>deserializeStateData</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.89">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.88">deserializeStateData</a>(<a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a> serializer)
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 class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html#deserializeStateData-org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer-">Procedure</a></code></span></div>
<div class="block">Called on store load to allow the user to decode the previously serialized
@@ -546,7 +546,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.100">getState</a>(int stateId)</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.99">getState</a>(int stateId)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getState-int-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert an ordinal (or state id) to an Enum (or more descriptive) state object.</div>
<dl>
@@ -565,7 +565,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getStateId</h4>
-<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.105">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState state)</pre>
+<pre>protected int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.104">getStateId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState state)</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getStateId-TState-">StateMachineProcedure</a></code></span></div>
<div class="block">Convert the Enum (or more descriptive) state object to an ordinal (or state id).</div>
<dl>
@@ -584,7 +584,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>getInitialState</h4>
-<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.110">getInitialState</a>()</pre>
+<pre>protected org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.109">getInitialState</a>()</pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#getInitialState--">StateMachineProcedure</a></code></span></div>
<div class="block">Return the initial state object that will be used for the first call to executeFromState().</div>
<dl>
@@ -601,7 +601,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>preTransit</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.115">preTransit</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.114">preTransit</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
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>
@@ -615,7 +615,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>postTransit</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.137">postTransit</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.136">postTransit</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
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>
@@ -629,7 +629,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>reopenRegions</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.149">reopenRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.148">reopenRegions</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)</pre>
</li>
</ul>
<a name="createDirForRemoteWAL-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -638,7 +638,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>createDirForRemoteWAL</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.156">createDirForRemoteWAL</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.155">createDirForRemoteWAL</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
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>
@@ -652,7 +652,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>setNextStateAfterRefreshBegin</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.169">setNextStateAfterRefreshBegin</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.168">setNextStateAfterRefreshBegin</a>()</pre>
</li>
</ul>
<a name="setNextStateAfterRefreshEnd--">
@@ -661,7 +661,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>setNextStateAfterRefreshEnd</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.188">setNextStateAfterRefreshEnd</a>()</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.187">setNextStateAfterRefreshEnd</a>()</pre>
</li>
</ul>
<a name="replayRemoteWAL-boolean-">
@@ -670,7 +670,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>replayRemoteWAL</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.204">replayRemoteWAL</a>(boolean serial)</pre>
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.203">replayRemoteWAL</a>(boolean serial)</pre>
</li>
</ul>
<a name="setPeerNewSyncReplicationState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-">
@@ -679,7 +679,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>setPeerNewSyncReplicationState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.209">setPeerNewSyncReplicationState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.208">setPeerNewSyncReplicationState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -693,7 +693,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>removeAllReplicationQueues</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.228">removeAllReplicationQueues</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.227">removeAllReplicationQueues</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -707,7 +707,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockList">
<li class="blockList">
<h4>transitPeerSyncReplicationState</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.233">transitPeerSyncReplicationState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.232">transitPeerSyncReplicationState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureEnv</a> env)
throws <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationException.html" title="class in org.apache.hadoop.hbase.replication">ReplicationException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -721,7 +721,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Ab
<ul class="blockListLast">
<li class="blockList">
<h4>executeFromState</h4>
-<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.239">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.m [...]
+<pre>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2">StateMachineProcedure.Flow</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html#line.238">executeFromState</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MasterProcedureEnv.html" title="class in org.apache.hadoop.hbase.m [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState state)
throws <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class: <code><a href="../../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.html#executeFromState-TEnvironment-TState-">StateMachineProcedure</a></code></span></div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html b/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
index e5fe0c3..c406963 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/replication/UpdatePeerConfigProcedure.html
@@ -218,7 +218,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Fields inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#attempts">attempts</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#peerId">peerId</a></code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
@@ -354,7 +354,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/replication/Mo
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.master.replication.<a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html" title="class in org.apache.hadoop.hbase.master.replication">AbstractPeerNoLockProcedure</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#setTimeoutFailure-org.apache.hadoop.hbase.maste [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#getPeerId--">getPeerId</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#resetRetry--">resetRetry</a>, <a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#rollbackState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-TState-">rollbackState</a>, <a href="../../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.procedure2.StateMachineProcedure">
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 15f3ffc..ba44e48 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -433,19 +433,19 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html
index a0b55b9..dd937a9 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.131">ProcedureUtil.CompatStateSerializer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.135">ProcedureUtil.CompatStateSerializer</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a></pre>
<div class="block">A serializer (deserializer) for those Procedures which were serialized
@@ -212,7 +212,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockListLast">
<li class="blockList">
<h4>inputStream</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.132">inputStream</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.136">inputStream</a></pre>
</li>
</ul>
</li>
@@ -229,7 +229,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockListLast">
<li class="blockList">
<h4>CompatStateSerializer</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.134">CompatStateSerializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> inputStream)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.138">CompatStateSerializer</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html?is-external=true" title="class or interface in java.io">InputStream</a> inputStream)</pre>
</li>
</ul>
</li>
@@ -246,7 +246,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockList">
<li class="blockList">
<h4>serialize</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.139">serialize</a>(org.apache.hbase.thirdparty.com.google.protobuf.Message message)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.143">serialize</a>(org.apache.hbase.thirdparty.com.google.protobuf.Message message)
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>
@@ -262,7 +262,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockListLast">
<li class="blockList">
<h4>deserialize</h4>
-<pre>public <M extends org.apache.hbase.thirdparty.com.google.protobuf.Message> M <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.145">deserialize</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><M> clazz)
+<pre>public <M extends org.apache.hbase.thirdparty.com.google.protobuf.Message> M <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.CompatStateSerializer.html#line.149">deserialize</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><M> clazz)
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>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html
index d26e855..7f06bee 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.97">ProcedureUtil.StateSerializer</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.101">ProcedureUtil.StateSerializer</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureStateSerializer.html" title="interface in org.apache.hadoop.hbase.procedure2">ProcedureStateSerializer</a></pre>
<div class="block">A serializer for our Procedures. Instead of the previous serializer, it
@@ -216,7 +216,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockList">
<li class="blockList">
<h4>builder</h4>
-<pre>private final org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure.Builder <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.98">builder</a></pre>
+<pre>private final org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure.Builder <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.102">builder</a></pre>
</li>
</ul>
<a name="deserializeIndex">
@@ -225,7 +225,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockListLast">
<li class="blockList">
<h4>deserializeIndex</h4>
-<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.99">deserializeIndex</a></pre>
+<pre>private int <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.103">deserializeIndex</a></pre>
</li>
</ul>
</li>
@@ -242,7 +242,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockListLast">
<li class="blockList">
<h4>StateSerializer</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.101">StateSerializer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure.Builder builder)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.105">StateSerializer</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure.Builder builder)</pre>
</li>
</ul>
</li>
@@ -259,7 +259,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockList">
<li class="blockList">
<h4>serialize</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.106">serialize</a>(org.apache.hbase.thirdparty.com.google.protobuf.Message message)
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.110">serialize</a>(org.apache.hbase.thirdparty.com.google.protobuf.Message message)
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>
@@ -275,7 +275,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureS
<ul class="blockListLast">
<li class="blockList">
<h4>deserialize</h4>
-<pre>public <M extends org.apache.hbase.thirdparty.com.google.protobuf.Message> M <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.112">deserialize</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><M> clazz)
+<pre>public <M extends org.apache.hbase.thirdparty.com.google.protobuf.Message> M <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.StateSerializer.html#line.116">deserialize</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><M> clazz)
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>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html
index 774f521..8be1989 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html
@@ -75,13 +75,13 @@ var activeTableTab = "activeTableTab";
<ul class="subNavList">
<li>Summary: </li>
<li><a href="#nested.class.summary">Nested</a> | </li>
-<li>Field | </li>
+<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
-<li>Field | </li>
+<li><a href="#field.detail">Field</a> | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre>@InterfaceAudience.Private
-public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.44">ProcedureUtil</a>
+public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.48">ProcedureUtil</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">Helper to convert to/from ProcedureProtos</div>
</li>
@@ -147,6 +147,37 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</table>
</li>
</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!-- -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#DEFAULT_PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">DEFAULT_PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS">DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_SLEEP_INTERVAL_MS">PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></span></code> </td>
+</tr>
+</table>
+</li>
+</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
@@ -203,9 +234,9 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#convertToProtoResourceType-org.apache.hadoop.hbase.procedure2.LockedResourceType-">convertToProtoResourceType</a></span>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2">LockedResourceType</a> resourceType)</code> </td>
</tr>
<tr id="i5" class="rowColor">
-<td class="colFirst"><code>static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#getBackoffTimeMs-int-">getBackoffTimeMs</a></span>(int attempts)</code>
-<div class="block">Get an exponential backoff time, in milliseconds.</div>
+<td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#createRetryCounter-org.apache.hadoop.conf.Configuration-">createRetryCounter</a></span>(org.apache.hadoop.conf.Configuration conf)</code>
+<div class="block">Get a retry counter for getting the backoff time.</div>
</td>
</tr>
<tr id="i6" class="altColor">
@@ -232,6 +263,62 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div class="details">
<ul class="blockList">
<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!-- -->
+</a>
+<h3>Field Detail</h3>
+<a name="PROCEDURE_RETRY_SLEEP_INTERVAL_MS">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PROCEDURE_RETRY_SLEEP_INTERVAL_MS</h4>
+<pre>public static final <a href="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/procedure2/ProcedureUtil.html#line.342">PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureUtil.PROCEDURE_RETRY_SLEEP_INTERVAL_MS">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS</h4>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.346">DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureUtil.DEFAULT_PROCEDURE_RETRY_SLEEP_INTERVAL_MS">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</h4>
+<pre>public static final <a href="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/procedure2/ProcedureUtil.html#line.348">PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.procedure2.ProcedureUtil.PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="DEFAULT_PROCEDURE_RETRY_MAX_SLEEP_TIME_MS">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DEFAULT_PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</h4>
+<pre>public static final long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.352">DEFAULT_PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</a></pre>
+</li>
+</ul>
+</li>
+</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
@@ -244,7 +331,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>ProcedureUtil</h4>
-<pre>private <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.45">ProcedureUtil</a>()</pre>
+<pre>private <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.49">ProcedureUtil</a>()</pre>
</li>
</ul>
</li>
@@ -261,7 +348,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>newProcedure</h4>
-<pre>private static <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.50">newProcedure</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> className)
+<pre>private static <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.54">newProcedure</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> className)
throws <a href="../../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">BadProcedureException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -275,7 +362,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>validateClass</h4>
-<pre>static void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.71">validateClass</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> proc)
+<pre>static void <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.75">validateClass</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> proc)
throws <a href="../../../../../org/apache/hadoop/hbase/procedure2/BadProcedureException.html" title="class in org.apache.hadoop.hbase.procedure2">BadProcedureException</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -289,7 +376,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>convertToProtoProcedure</h4>
-<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.161">convertToProtoProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> proc)
+<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.165">convertToProtoProcedure</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> proc)
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">Helper to convert the procedure to protobuf.
<p/>
@@ -306,7 +393,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>convertToProcedure</h4>
-<pre>public static <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.230">convertToProcedure</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure proto)
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a><?> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.234">convertToProcedure</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos.Procedure proto)
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">Helper to convert the protobuf procedure.
<p/>
@@ -327,7 +414,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>convertToProtoResourceType</h4>
-<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockedResourceType <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.300">convertToProtoResourceType</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2">LockedResourceType</a> resourceType)</pre>
+<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockedResourceType <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.304">convertToProtoResourceType</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2">LockedResourceType</a> resourceType)</pre>
</li>
</ul>
<a name="convertToProtoLockType-org.apache.hadoop.hbase.procedure2.LockType-">
@@ -336,7 +423,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>convertToProtoLockType</h4>
-<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockType <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.305">convertToProtoLockType</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2">LockType</a> lockType)</pre>
+<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockType <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.309">convertToProtoLockType</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2">LockType</a> lockType)</pre>
</li>
</ul>
<a name="convertToProtoLockedResource-org.apache.hadoop.hbase.procedure2.LockedResource-">
@@ -345,7 +432,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>convertToProtoLockedResource</h4>
-<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockedResource <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.309">convertToProtoLockedResource</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a> lockedResource)
+<pre>public static org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockedResource <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.313">convertToProtoLockedResource</a>(<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResource.html" title="class in org.apache.hadoop.hbase.procedure2">LockedResource</a> lockedResource)
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>
@@ -353,16 +440,20 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</dl>
</li>
</ul>
-<a name="getBackoffTimeMs-int-">
+<a name="createRetryCounter-org.apache.hadoop.conf.Configuration-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
-<h4>getBackoffTimeMs</h4>
-<pre>public static long <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.343">getBackoffTimeMs</a>(int attempts)</pre>
-<div class="block">Get an exponential backoff time, in milliseconds. The base unit is 1 second, and the max
- backoff time is 10 minutes. This is the general backoff policy for most procedure
- implementation.</div>
+<h4>createRetryCounter</h4>
+<pre>public static <a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#line.364">createRetryCounter</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<div class="block">Get a retry counter for getting the backoff time. We will use the
+ <a href="../../../../../org/apache/hadoop/hbase/util/RetryCounter.ExponentialBackoffPolicyWithLimit.html" title="class in org.apache.hadoop.hbase.util"><code>RetryCounter.ExponentialBackoffPolicyWithLimit</code></a> policy, and the base unit is 1 second, max sleep time
+ is 10 minutes by default.
+ <p/>
+ For UTs, you can set the <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_SLEEP_INTERVAL_MS"><code>PROCEDURE_RETRY_SLEEP_INTERVAL_MS</code></a> and
+ <a href="../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#PROCEDURE_RETRY_MAX_SLEEP_TIME_MS"><code>PROCEDURE_RETRY_MAX_SLEEP_TIME_MS</code></a> to make more frequent retry so your UT will not
+ timeout.</div>
</li>
</ul>
</li>
@@ -419,13 +510,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="subNavList">
<li>Summary: </li>
<li><a href="#nested.class.summary">Nested</a> | </li>
-<li>Field | </li>
+<li><a href="#field.summary">Field</a> | </li>
<li><a href="#constructor.summary">Constr</a> | </li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail: </li>
-<li>Field | </li>
+<li><a href="#field.detail">Field</a> | </li>
<li><a href="#constructor.detail">Constr</a> | </li>
<li><a href="#method.detail">Method</a></li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureSuspendedException.html b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureSuspendedException.html
index 663549f..dc5ee17 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureSuspendedException.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/class-use/ProcedureSuspendedException.html
@@ -224,19 +224,6 @@
</a>
<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/package-summary.html">org.apache.hadoop.hbase.master.procedure</a></h3>
<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
-<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/package-summary.html">org.apache.hadoop.hbase.master.procedure</a> that return <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></span><span class="tabEnd"> </span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code></td>
-<td class="colLast"><span class="typeNameLabel">SplitWALProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#suspend-long-">suspend</a></span>(long backoff)</code> </td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/package-summary.html">org.apache.hadoop.hbase.master.procedure</a> that throw <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></span><span class="tabEnd"> </span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
@@ -279,10 +266,6 @@
<td class="colLast"><span class="typeNameLabel">SwitchRpcThrottleProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#executeFromState-org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv-org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState-">executeFromState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/Maste [...]
org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState state)</code> </td>
</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code></td>
-<td class="colLast"><span class="typeNameLabel">SplitWALProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#suspend-long-">suspend</a></span>(long backoff)</code> </td>
-</tr>
</tbody>
</table>
</li>
@@ -299,7 +282,8 @@
<tbody>
<tr class="altColor">
<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AbstractPeerNoLockProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-long-">suspend</a></span>(long backoff)</code> </td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerNoLockProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-org.apache.hadoop.conf.Configuration-java.util.function.LongConsumer-">suspend</a></span>(org.apache.hadoop.conf.Configuration conf,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/LongConsumer.html?is-external=true" title="class or interface in java.util.function">LongConsumer</a> backoffConsumer)</code> </td>
</tr>
</tbody>
</table>
@@ -339,7 +323,8 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureSuspendedException.html" title="class in org.apache.hadoop.hbase.procedure2">ProcedureSuspendedException</a></code></td>
-<td class="colLast"><span class="typeNameLabel">AbstractPeerNoLockProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-long-">suspend</a></span>(long backoff)</code> </td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerNoLockProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#suspend-org.apache.hadoop.conf.Configuration-java.util.function.LongConsumer-">suspend</a></span>(org.apache.hadoop.conf.Configuration conf,
+ <a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/LongConsumer.html?is-external=true" title="class or interface in java.util.function">LongConsumer</a> backoffConsumer)</code> </td>
</tr>
</tbody>
</table>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 6805800..bd9476c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -218,9 +218,9 @@
<ul>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/class-use/RpcThrottleStorage.html b/devapidocs/org/apache/hadoop/hbase/quotas/class-use/RpcThrottleStorage.html
index 8063654..c818943 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/class-use/RpcThrottleStorage.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/class-use/RpcThrottleStorage.html
@@ -107,7 +107,7 @@
</tr>
<tbody>
<tr class="altColor">
-<td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a></code></td>
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/quotas/RpcThrottleStorage.html" title="class in org.apache.hadoop.hbase.quotas">RpcThrottleStorage</a></code></td>
<td class="colLast"><span class="typeNameLabel">SwitchRpcThrottleProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#rpcThrottleStorage">rpcThrottleStorage</a></span></code> </td>
</tr>
</tbody>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 2b89b54..8a70252 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 21441b3..b6b2e0f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -715,20 +715,20 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index 74ae4b0..45a338f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index dcee643..5ef6472 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,10 +247,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index 02505ac..818a04c 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -162,8 +162,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 9a2ed16..19d2ff4 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -208,8 +208,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 7d70035..3aa879d 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 6c54bc9..7f67ffe 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -143,10 +143,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index bd591e2..25eb637 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,8 +192,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
</ul>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 7edef14..47e3265 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -208,8 +208,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/RetryCounter.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/RetryCounter.html
index 8b3e6cd..87d74c7 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/RetryCounter.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/RetryCounter.html
@@ -83,6 +83,22 @@
</tr>
<tbody>
<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.assignment">org.apache.hadoop.hbase.master.assignment</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.procedure">org.apache.hadoop.hbase.master.procedure</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.handler">org.apache.hadoop.hbase.regionserver.handler</a></td>
<td class="colLast"> </td>
</tr>
@@ -99,6 +115,96 @@
</li>
<li class="blockList">
<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.master.assignment">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/master/assignment/package-summary.html">org.apache.hadoop.hbase.master.assignment</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">RegionRemoteProcedureBase.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">TransitRegionStateProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.master.procedure">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/package-summary.html">org.apache.hadoop.hbase.master.procedure</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/master/procedure/package-summary.html">org.apache.hadoop.hbase.master.procedure</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">SplitWALProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">InitMetaProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ReopenTableRegionsProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">SwitchRpcThrottleProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.master.replication">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> in <a href="../../../../../../org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.replication</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.replication</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">AbstractPeerNoLockProcedure.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html#retryCounter">retryCounter</a></span></code> </td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.procedure2">
+<!-- -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a> in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/procedure2/package-summary.html">org.apache.hadoop.hbase.procedure2</a> that return <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ProcedureUtil.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/procedure2/ProcedureUtil.html#createRetryCounter-org.apache.hadoop.conf.Configuration-">createRetryCounter</a></span>(org.apache.hadoop.conf.Configuration conf)</code>
+<div class="block">Get a retry counter for getting the backoff time.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
<li class="blockList"><a name="org.apache.hadoop.hbase.regionserver.handler">
<!-- -->
</a>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index d56e11e..f9434de 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -542,14 +542,14 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-use.html b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
index 95e6362..14b7d04 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
@@ -232,97 +232,101 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.snapshot">org.apache.hadoop.hbase.master.snapshot</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.replication">org.apache.hadoop.hbase.master.replication</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.mob">org.apache.hadoop.hbase.mob</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.master.snapshot">org.apache.hadoop.hbase.master.snapshot</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.mob.compactions">org.apache.hadoop.hbase.mob.compactions</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.mob">org.apache.hadoop.hbase.mob</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.nio">org.apache.hadoop.hbase.nio</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.mob.compactions">org.apache.hadoop.hbase.mob.compactions</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.nio">org.apache.hadoop.hbase.nio</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.procedure2">org.apache.hadoop.hbase.procedure2</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.compactions">org.apache.hadoop.hbase.regionserver.compactions</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.handler">org.apache.hadoop.hbase.regionserver.handler</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.compactions">org.apache.hadoop.hbase.regionserver.compactions</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.querymatcher">org.apache.hadoop.hbase.regionserver.querymatcher</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.handler">org.apache.hadoop.hbase.regionserver.handler</a></td>
<td class="colLast"> </td>
</tr>
<tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.wal">org.apache.hadoop.hbase.regionserver.wal</a></td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.querymatcher">org.apache.hadoop.hbase.regionserver.querymatcher</a></td>
<td class="colLast"> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.wal">org.apache.hadoop.hbase.regionserver.wal</a></td>
+<td class="colLast"> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
<td class="colLast">
<div class="block">Multi Cluster Replication</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.rest">org.apache.hadoop.hbase.rest</a></td>
<td class="colLast">
<div class="block">HBase REST</div>
</td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.rsgroup">org.apache.hadoop.hbase.rsgroup</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.security.visibility">org.apache.hadoop.hbase.security.visibility</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift">org.apache.hadoop.hbase.thrift</a></td>
<td class="colLast">
<div class="block">Provides an HBase <a href="http://incubator.apache.org/thrift/">Thrift</a>
service.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift2.client">org.apache.hadoop.hbase.thrift2.client</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.tool.coprocessor">org.apache.hadoop.hbase.tool.coprocessor</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.types">org.apache.hadoop.hbase.types</a></td>
<td class="colLast">
<div class="block">
@@ -330,19 +334,19 @@ service.</div>
extensible data type API.</div>
</td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.util.hbck">org.apache.hadoop.hbase.util.hbck</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
<td class="colLast"> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><a href="#org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper</a></td>
<td class="colLast"> </td>
</tr>
@@ -969,6 +973,11 @@ service.</div>
<div class="block">A generic class for pairs.</div>
</td>
</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.html#org.apache.hadoop.hbase.master.assignment">RetryCounter</a>
+<div class="block">Operation retry accounting.</div>
+</td>
+</tr>
</tbody>
</table>
</li>
@@ -1058,6 +1067,28 @@ service.</div>
<div class="block">A generic class for pairs.</div>
</td>
</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.html#org.apache.hadoop.hbase.master.procedure">RetryCounter</a>
+<div class="block">Operation retry accounting.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.master.replication">
+<!-- -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a> used by <a href="../../../../../org/apache/hadoop/hbase/master/replication/package-summary.html">org.apache.hadoop.hbase.master.replication</a></span><span class="tabEnd"> </span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.html#org.apache.hadoop.hbase.master.replication">RetryCounter</a>
+<div class="block">Operation retry accounting.</div>
+</td>
+</tr>
</tbody>
</table>
</li>
@@ -1160,6 +1191,11 @@ service.</div>
<div class="block">This implementation is not smart and just treats nonce group and nonce as random bits.</div>
</td>
</tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.html#org.apache.hadoop.hbase.procedure2">RetryCounter</a>
+<div class="block">Operation retry accounting.</div>
+</td>
+</tr>
</tbody>
</table>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 951fb0c..cb3db448 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -191,8 +191,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 51b17eb..eb053a7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
<span class="sourceLineNo">010</span> public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
<span class="sourceLineNo">011</span> public static final String revision = "Unknown";<a name="line.11"></a>
<span class="sourceLineNo">012</span> public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span> public static final String date = "Fri May 3 14:34:30 UTC 2019";<a name="line.13"></a>
+<span class="sourceLineNo">013</span> public static final String date = "Sat May 4 17:27:11 UTC 2019";<a name="line.13"></a>
<span class="sourceLineNo">014</span> public static final String url = "file:///home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span> public static final String srcChecksum = "fe48d5c5d2de4fe6b4e89d6da1c8038f";<a name="line.15"></a>
+<span class="sourceLineNo">015</span> public static final String srcChecksum = "4b63fe9b04e1c2cf4788ef56a264dc16";<a name="line.15"></a>
<span class="sourceLineNo">016</span>}<a name="line.16"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
index 3b159a2..36b0433 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/RegionRemoteProcedureBase.html
@@ -42,286 +42,290 @@
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureDispatcher.RemoteProcedure;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.RemoteProcedureException;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionRemoteProcedureBaseState;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionRemoteProcedureBaseStateData;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>/**<a name="line.47"></a>
-<span class="sourceLineNo">048</span> * The base class for the remote procedures used to open/close a region.<a name="line.48"></a>
-<span class="sourceLineNo">049</span> * <p/><a name="line.49"></a>
-<span class="sourceLineNo">050</span> * Notice that here we do not care about the result of the remote call, if the remote call is<a name="line.50"></a>
-<span class="sourceLineNo">051</span> * finished, either succeeded or not, we will always finish the procedure. The parent procedure<a name="line.51"></a>
-<span class="sourceLineNo">052</span> * should take care of the result and try to reschedule if the result is not good.<a name="line.52"></a>
-<span class="sourceLineNo">053</span> */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
-<span class="sourceLineNo">055</span>public abstract class RegionRemoteProcedureBase extends Procedure<MasterProcedureEnv><a name="line.55"></a>
-<span class="sourceLineNo">056</span> implements TableProcedureInterface, RemoteProcedure<MasterProcedureEnv, ServerName> {<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span> private static final Logger LOG = LoggerFactory.getLogger(RegionRemoteProcedureBase.class);<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span> protected RegionInfo region;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span> protected ServerName targetServer;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span> private RegionRemoteProcedureBaseState state =<a name="line.64"></a>
-<span class="sourceLineNo">065</span> RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH;<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span> private TransitionCode transitionCode;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span> private long seqId;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span> private int attempt;<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span> protected RegionRemoteProcedureBase() {<a name="line.73"></a>
-<span class="sourceLineNo">074</span> }<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span> protected RegionRemoteProcedureBase(TransitRegionStateProcedure parent, RegionInfo region,<a name="line.76"></a>
-<span class="sourceLineNo">077</span> ServerName targetServer) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span> this.region = region;<a name="line.78"></a>
-<span class="sourceLineNo">079</span> this.targetServer = targetServer;<a name="line.79"></a>
-<span class="sourceLineNo">080</span> parent.attachRemoteProc(this);<a name="line.80"></a>
-<span class="sourceLineNo">081</span> }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span> @Override<a name="line.83"></a>
-<span class="sourceLineNo">084</span> public void remoteOperationCompleted(MasterProcedureEnv env) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span> // should not be called since we use reportRegionStateTransition to report the result<a name="line.85"></a>
-<span class="sourceLineNo">086</span> throw new UnsupportedOperationException();<a name="line.86"></a>
-<span class="sourceLineNo">087</span> }<a name="line.87"></a>
-<span class="sourceLineNo">088</span><a name="line.88"></a>
-<span class="sourceLineNo">089</span> @Override<a name="line.89"></a>
-<span class="sourceLineNo">090</span> public void remoteOperationFailed(MasterProcedureEnv env, RemoteProcedureException error) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> // should not be called since we use reportRegionStateTransition to report the result<a name="line.91"></a>
-<span class="sourceLineNo">092</span> throw new UnsupportedOperationException();<a name="line.92"></a>
-<span class="sourceLineNo">093</span> }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span> private RegionStateNode getRegionNode(MasterProcedureEnv env) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span> return env.getAssignmentManager().getRegionStates().getRegionStateNode(region);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> }<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span> @Override<a name="line.99"></a>
-<span class="sourceLineNo">100</span> public void remoteCallFailed(MasterProcedureEnv env, ServerName remote, IOException exception) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> RegionStateNode regionNode = getRegionNode(env);<a name="line.101"></a>
-<span class="sourceLineNo">102</span> regionNode.lock();<a name="line.102"></a>
-<span class="sourceLineNo">103</span> try {<a name="line.103"></a>
-<span class="sourceLineNo">104</span> if (!env.getMasterServices().getServerManager().isServerOnline(remote)) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span> // the SCP will interrupt us, give up<a name="line.105"></a>
-<span class="sourceLineNo">106</span> LOG.debug("{} for region {}, targetServer {} is dead, SCP will interrupt us, give up", this,<a name="line.106"></a>
-<span class="sourceLineNo">107</span> regionNode, remote);<a name="line.107"></a>
-<span class="sourceLineNo">108</span> return;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> }<a name="line.109"></a>
-<span class="sourceLineNo">110</span> if (state != RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH) {<a name="line.110"></a>
-<span class="sourceLineNo">111</span> // not sure how can this happen but anyway let's add a check here to avoid waking the wrong<a name="line.111"></a>
-<span class="sourceLineNo">112</span> // procedure...<a name="line.112"></a>
-<span class="sourceLineNo">113</span> LOG.warn("{} for region {}, targetServer={} has already been woken up, ignore", this,<a name="line.113"></a>
-<span class="sourceLineNo">114</span> regionNode, remote);<a name="line.114"></a>
-<span class="sourceLineNo">115</span> return;<a name="line.115"></a>
-<span class="sourceLineNo">116</span> }<a name="line.116"></a>
-<span class="sourceLineNo">117</span> LOG.warn("The remote operation {} for region {} to server {} failed", this, regionNode,<a name="line.117"></a>
-<span class="sourceLineNo">118</span> remote, exception);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> // It is OK to not persist the state here, as we do not need to change the region state if the<a name="line.119"></a>
-<span class="sourceLineNo">120</span> // remote call is failed. If the master crashed before we actually execute the procedure and<a name="line.120"></a>
-<span class="sourceLineNo">121</span> // persist the new state, it is fine to retry on the same target server again.<a name="line.121"></a>
-<span class="sourceLineNo">122</span> state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH_FAIL;<a name="line.122"></a>
-<span class="sourceLineNo">123</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.123"></a>
-<span class="sourceLineNo">124</span> } finally {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> regionNode.unlock();<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span> }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span> public TableName getTableName() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> return region.getTable();<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> @Override<a name="line.134"></a>
-<span class="sourceLineNo">135</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span> if (TableName.isMetaTableName(getTableName())) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span> return false;<a name="line.137"></a>
-<span class="sourceLineNo">138</span> }<a name="line.138"></a>
-<span class="sourceLineNo">139</span> // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.139"></a>
-<span class="sourceLineNo">140</span> // fail when updating meta so we wait until it is assigned.<a name="line.140"></a>
-<span class="sourceLineNo">141</span> AssignmentManager am = env.getAssignmentManager();<a name="line.141"></a>
-<span class="sourceLineNo">142</span> return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, region);<a name="line.142"></a>
-<span class="sourceLineNo">143</span> }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span> @Override<a name="line.145"></a>
-<span class="sourceLineNo">146</span> protected void rollback(MasterProcedureEnv env) throws IOException, InterruptedException {<a name="line.146"></a>
-<span class="sourceLineNo">147</span> throw new UnsupportedOperationException();<a name="line.147"></a>
-<span class="sourceLineNo">148</span> }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span> @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span> protected boolean abort(MasterProcedureEnv env) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span> return false;<a name="line.152"></a>
-<span class="sourceLineNo">153</span> }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> // do some checks to see if the report is valid, without actually updating meta.<a name="line.155"></a>
-<span class="sourceLineNo">156</span> protected abstract void reportTransition(RegionStateNode regionNode,<a name="line.156"></a>
-<span class="sourceLineNo">157</span> TransitionCode transitionCode, long seqId) throws IOException;<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span> // A bit strange but the procedure store will throw RuntimeException if we can not persist the<a name="line.159"></a>
-<span class="sourceLineNo">160</span> // state, so upper layer should take care of this...<a name="line.160"></a>
-<span class="sourceLineNo">161</span> private void persistAndWake(MasterProcedureEnv env, RegionStateNode regionNode) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> env.getMasterServices().getMasterProcedureExecutor().getStore().update(this);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.163"></a>
-<span class="sourceLineNo">164</span> }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span> // should be called with RegionStateNode locked, to avoid race with the execute method below<a name="line.166"></a>
-<span class="sourceLineNo">167</span> void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode, ServerName serverName,<a name="line.167"></a>
-<span class="sourceLineNo">168</span> TransitionCode transitionCode, long seqId) throws IOException {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> if (state != RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> // should be a retry<a name="line.170"></a>
-<span class="sourceLineNo">171</span> return;<a name="line.171"></a>
-<span class="sourceLineNo">172</span> }<a name="line.172"></a>
-<span class="sourceLineNo">173</span> if (!targetServer.equals(serverName)) {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> throw new UnexpectedStateException("Received report from " + serverName + ", expected " +<a name="line.174"></a>
-<span class="sourceLineNo">175</span> targetServer + ", " + regionNode + ", proc=" + this);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span> reportTransition(regionNode, transitionCode, seqId);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // this state means we have received the report from RS, does not mean the result is fine, as we<a name="line.178"></a>
-<span class="sourceLineNo">179</span> // may received a FAILED_OPEN.<a name="line.179"></a>
-<span class="sourceLineNo">180</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_REPORT_SUCCEED;<a name="line.180"></a>
-<span class="sourceLineNo">181</span> this.transitionCode = transitionCode;<a name="line.181"></a>
-<span class="sourceLineNo">182</span> this.seqId = seqId;<a name="line.182"></a>
-<span class="sourceLineNo">183</span> // Persist the transition code and openSeqNum(if provided).<a name="line.183"></a>
-<span class="sourceLineNo">184</span> // We should not update the hbase:meta directly as this may cause races when master restarts,<a name="line.184"></a>
-<span class="sourceLineNo">185</span> // as the old active master may incorrectly report back to RS and cause the new master to hang<a name="line.185"></a>
-<span class="sourceLineNo">186</span> // on a OpenRegionProcedure forever. See HBASE-22060 and HBASE-22074 for more details.<a name="line.186"></a>
-<span class="sourceLineNo">187</span> boolean succ = false;<a name="line.187"></a>
-<span class="sourceLineNo">188</span> try {<a name="line.188"></a>
-<span class="sourceLineNo">189</span> persistAndWake(env, regionNode);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> succ = true;<a name="line.190"></a>
-<span class="sourceLineNo">191</span> } finally {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> if (!succ) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH;<a name="line.193"></a>
-<span class="sourceLineNo">194</span> this.transitionCode = null;<a name="line.194"></a>
-<span class="sourceLineNo">195</span> this.seqId = HConstants.NO_SEQNUM;<a name="line.195"></a>
-<span class="sourceLineNo">196</span> }<a name="line.196"></a>
-<span class="sourceLineNo">197</span> }<a name="line.197"></a>
-<span class="sourceLineNo">198</span> }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span> void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode, ServerName serverName) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> if (state != RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span> // should be a retry<a name="line.202"></a>
-<span class="sourceLineNo">203</span> return;<a name="line.203"></a>
-<span class="sourceLineNo">204</span> }<a name="line.204"></a>
-<span class="sourceLineNo">205</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_SERVER_CRASH;<a name="line.205"></a>
-<span class="sourceLineNo">206</span> boolean succ = false;<a name="line.206"></a>
-<span class="sourceLineNo">207</span> try {<a name="line.207"></a>
-<span class="sourceLineNo">208</span> persistAndWake(env, regionNode);<a name="line.208"></a>
-<span class="sourceLineNo">209</span> succ = true;<a name="line.209"></a>
-<span class="sourceLineNo">210</span> } finally {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> if (!succ) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH;<a name="line.212"></a>
-<span class="sourceLineNo">213</span> }<a name="line.213"></a>
-<span class="sourceLineNo">214</span> }<a name="line.214"></a>
-<span class="sourceLineNo">215</span> }<a name="line.215"></a>
-<span class="sourceLineNo">216</span><a name="line.216"></a>
-<span class="sourceLineNo">217</span> private TransitRegionStateProcedure getParent(MasterProcedureEnv env) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span> return (TransitRegionStateProcedure) env.getMasterServices().getMasterProcedureExecutor()<a name="line.218"></a>
-<span class="sourceLineNo">219</span> .getProcedure(getParentProcId());<a name="line.219"></a>
-<span class="sourceLineNo">220</span> }<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> private void unattach(MasterProcedureEnv env) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> getParent(env).unattachRemoteProc(this);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span> // actually update the state to meta<a name="line.226"></a>
-<span class="sourceLineNo">227</span> protected abstract void updateTransition(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.227"></a>
-<span class="sourceLineNo">228</span> TransitionCode transitionCode, long seqId) throws IOException;<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> @Override<a name="line.230"></a>
-<span class="sourceLineNo">231</span> protected Procedure<MasterProcedureEnv>[] execute(MasterProcedureEnv env)<a name="line.231"></a>
-<span class="sourceLineNo">232</span> throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span> RegionStateNode regionNode = getRegionNode(env);<a name="line.233"></a>
-<span class="sourceLineNo">234</span> regionNode.lock();<a name="line.234"></a>
-<span class="sourceLineNo">235</span> try {<a name="line.235"></a>
-<span class="sourceLineNo">236</span> switch (state) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> case REGION_REMOTE_PROCEDURE_DISPATCH: {<a name="line.237"></a>
-<span class="sourceLineNo">238</span> // The code which wakes us up also needs to lock the RSN so here we do not need to<a name="line.238"></a>
-<span class="sourceLineNo">239</span> // synchronize<a name="line.239"></a>
-<span class="sourceLineNo">240</span> // on the event.<a name="line.240"></a>
-<span class="sourceLineNo">241</span> ProcedureEvent<?> event = regionNode.getProcedureEvent();<a name="line.241"></a>
-<span class="sourceLineNo">242</span> try {<a name="line.242"></a>
-<span class="sourceLineNo">243</span> env.getRemoteDispatcher().addOperationToNode(targetServer, this);<a name="line.243"></a>
-<span class="sourceLineNo">244</span> } catch (FailedRemoteDispatchException e) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span> LOG.warn("Can not add remote operation {} for region {} to server {}, this usually " +<a name="line.245"></a>
-<span class="sourceLineNo">246</span> "because the server is alread dead, give up and mark the procedure as complete, " +<a name="line.246"></a>
-<span class="sourceLineNo">247</span> "the parent procedure will take care of this.", this, region, targetServer, e);<a name="line.247"></a>
-<span class="sourceLineNo">248</span> unattach(env);<a name="line.248"></a>
-<span class="sourceLineNo">249</span> return null;<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
-<span class="sourceLineNo">251</span> event.suspend();<a name="line.251"></a>
-<span class="sourceLineNo">252</span> event.suspendIfNotReady(this);<a name="line.252"></a>
-<span class="sourceLineNo">253</span> throw new ProcedureSuspendedException();<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span> case REGION_REMOTE_PROCEDURE_REPORT_SUCCEED:<a name="line.255"></a>
-<span class="sourceLineNo">256</span> updateTransition(env, regionNode, transitionCode, seqId);<a name="line.256"></a>
-<span class="sourceLineNo">257</span> unattach(env);<a name="line.257"></a>
-<span class="sourceLineNo">258</span> return null;<a name="line.258"></a>
-<span class="sourceLineNo">259</span> case REGION_REMOTE_PROCEDURE_DISPATCH_FAIL:<a name="line.259"></a>
-<span class="sourceLineNo">260</span> // the remote call is failed so we do not need to change the region state, just return.<a name="line.260"></a>
-<span class="sourceLineNo">261</span> unattach(env);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> return null;<a name="line.262"></a>
-<span class="sourceLineNo">263</span> case REGION_REMOTE_PROCEDURE_SERVER_CRASH:<a name="line.263"></a>
-<span class="sourceLineNo">264</span> env.getAssignmentManager().regionClosed(regionNode, false);<a name="line.264"></a>
-<span class="sourceLineNo">265</span> unattach(env);<a name="line.265"></a>
-<span class="sourceLineNo">266</span> return null;<a name="line.266"></a>
-<span class="sourceLineNo">267</span> default:<a name="line.267"></a>
-<span class="sourceLineNo">268</span> throw new IllegalStateException("Unknown state: " + state);<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span> } catch (IOException e) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> long backoff = ProcedureUtil.getBackoffTimeMs(this.attempt++);<a name="line.271"></a>
-<span class="sourceLineNo">272</span> LOG.warn("Failed updating meta, suspend {}secs {}; {};", backoff / 1000, this, regionNode, e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> setTimeout(Math.toIntExact(backoff));<a name="line.273"></a>
-<span class="sourceLineNo">274</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.274"></a>
-<span class="sourceLineNo">275</span> skipPersistence();<a name="line.275"></a>
-<span class="sourceLineNo">276</span> throw new ProcedureSuspendedException();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> } finally {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> regionNode.unlock();<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> }<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> @Override<a name="line.282"></a>
-<span class="sourceLineNo">283</span> public boolean storeInDispatchedQueue() {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> return false;<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span> @Override<a name="line.287"></a>
-<span class="sourceLineNo">288</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span> RegionRemoteProcedureBaseStateData.Builder builder =<a name="line.289"></a>
-<span class="sourceLineNo">290</span> RegionRemoteProcedureBaseStateData.newBuilder().setRegion(ProtobufUtil.toRegionInfo(region))<a name="line.290"></a>
-<span class="sourceLineNo">291</span> .setTargetServer(ProtobufUtil.toServerName(targetServer)).setState(state);<a name="line.291"></a>
-<span class="sourceLineNo">292</span> if (transitionCode != null) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span> builder.setTransitionCode(transitionCode);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> builder.setSeqId(seqId);<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> serializer.serialize(builder.build());<a name="line.296"></a>
-<span class="sourceLineNo">297</span> }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span> @Override<a name="line.299"></a>
-<span class="sourceLineNo">300</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span> RegionRemoteProcedureBaseStateData data =<a name="line.301"></a>
-<span class="sourceLineNo">302</span> serializer.deserialize(RegionRemoteProcedureBaseStateData.class);<a name="line.302"></a>
-<span class="sourceLineNo">303</span> region = ProtobufUtil.toRegionInfo(data.getRegion());<a name="line.303"></a>
-<span class="sourceLineNo">304</span> targetServer = ProtobufUtil.toServerName(data.getTargetServer());<a name="line.304"></a>
-<span class="sourceLineNo">305</span> state = data.getState();<a name="line.305"></a>
-<span class="sourceLineNo">306</span> if (data.hasTransitionCode()) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span> transitionCode = data.getTransitionCode();<a name="line.307"></a>
-<span class="sourceLineNo">308</span> seqId = data.getSeqId();<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span> @Override<a name="line.312"></a>
-<span class="sourceLineNo">313</span> protected void afterReplay(MasterProcedureEnv env) {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> getParent(env).attachRemoteProc(this);<a name="line.314"></a>
-<span class="sourceLineNo">315</span> }<a name="line.315"></a>
-<span class="sourceLineNo">316</span>}<a name="line.316"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.Logger;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.slf4j.LoggerFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionRemoteProcedureBaseState;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionRemoteProcedureBaseStateData;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>/**<a name="line.48"></a>
+<span class="sourceLineNo">049</span> * The base class for the remote procedures used to open/close a region.<a name="line.49"></a>
+<span class="sourceLineNo">050</span> * <p/><a name="line.50"></a>
+<span class="sourceLineNo">051</span> * Notice that here we do not care about the result of the remote call, if the remote call is<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * finished, either succeeded or not, we will always finish the procedure. The parent procedure<a name="line.52"></a>
+<span class="sourceLineNo">053</span> * should take care of the result and try to reschedule if the result is not good.<a name="line.53"></a>
+<span class="sourceLineNo">054</span> */<a name="line.54"></a>
+<span class="sourceLineNo">055</span>@InterfaceAudience.Private<a name="line.55"></a>
+<span class="sourceLineNo">056</span>public abstract class RegionRemoteProcedureBase extends Procedure<MasterProcedureEnv><a name="line.56"></a>
+<span class="sourceLineNo">057</span> implements TableProcedureInterface, RemoteProcedure<MasterProcedureEnv, ServerName> {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span> private static final Logger LOG = LoggerFactory.getLogger(RegionRemoteProcedureBase.class);<a name="line.59"></a>
+<span class="sourceLineNo">060</span><a name="line.60"></a>
+<span class="sourceLineNo">061</span> protected RegionInfo region;<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span> protected ServerName targetServer;<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span> private RegionRemoteProcedureBaseState state =<a name="line.65"></a>
+<span class="sourceLineNo">066</span> RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span> private TransitionCode transitionCode;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span> private long seqId;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span> private RetryCounter retryCounter;<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span> protected RegionRemoteProcedureBase() {<a name="line.74"></a>
+<span class="sourceLineNo">075</span> }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span> protected RegionRemoteProcedureBase(TransitRegionStateProcedure parent, RegionInfo region,<a name="line.77"></a>
+<span class="sourceLineNo">078</span> ServerName targetServer) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span> this.region = region;<a name="line.79"></a>
+<span class="sourceLineNo">080</span> this.targetServer = targetServer;<a name="line.80"></a>
+<span class="sourceLineNo">081</span> parent.attachRemoteProc(this);<a name="line.81"></a>
+<span class="sourceLineNo">082</span> }<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span> @Override<a name="line.84"></a>
+<span class="sourceLineNo">085</span> public void remoteOperationCompleted(MasterProcedureEnv env) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> // should not be called since we use reportRegionStateTransition to report the result<a name="line.86"></a>
+<span class="sourceLineNo">087</span> throw new UnsupportedOperationException();<a name="line.87"></a>
+<span class="sourceLineNo">088</span> }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span> @Override<a name="line.90"></a>
+<span class="sourceLineNo">091</span> public void remoteOperationFailed(MasterProcedureEnv env, RemoteProcedureException error) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span> // should not be called since we use reportRegionStateTransition to report the result<a name="line.92"></a>
+<span class="sourceLineNo">093</span> throw new UnsupportedOperationException();<a name="line.93"></a>
+<span class="sourceLineNo">094</span> }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span> private RegionStateNode getRegionNode(MasterProcedureEnv env) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span> return env.getAssignmentManager().getRegionStates().getRegionStateNode(region);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span> @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span> public void remoteCallFailed(MasterProcedureEnv env, ServerName remote, IOException exception) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span> RegionStateNode regionNode = getRegionNode(env);<a name="line.102"></a>
+<span class="sourceLineNo">103</span> regionNode.lock();<a name="line.103"></a>
+<span class="sourceLineNo">104</span> try {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> if (!env.getMasterServices().getServerManager().isServerOnline(remote)) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span> // the SCP will interrupt us, give up<a name="line.106"></a>
+<span class="sourceLineNo">107</span> LOG.debug("{} for region {}, targetServer {} is dead, SCP will interrupt us, give up", this,<a name="line.107"></a>
+<span class="sourceLineNo">108</span> regionNode, remote);<a name="line.108"></a>
+<span class="sourceLineNo">109</span> return;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> }<a name="line.110"></a>
+<span class="sourceLineNo">111</span> if (state != RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span> // not sure how can this happen but anyway let's add a check here to avoid waking the wrong<a name="line.112"></a>
+<span class="sourceLineNo">113</span> // procedure...<a name="line.113"></a>
+<span class="sourceLineNo">114</span> LOG.warn("{} for region {}, targetServer={} has already been woken up, ignore", this,<a name="line.114"></a>
+<span class="sourceLineNo">115</span> regionNode, remote);<a name="line.115"></a>
+<span class="sourceLineNo">116</span> return;<a name="line.116"></a>
+<span class="sourceLineNo">117</span> }<a name="line.117"></a>
+<span class="sourceLineNo">118</span> LOG.warn("The remote operation {} for region {} to server {} failed", this, regionNode,<a name="line.118"></a>
+<span class="sourceLineNo">119</span> remote, exception);<a name="line.119"></a>
+<span class="sourceLineNo">120</span> // It is OK to not persist the state here, as we do not need to change the region state if the<a name="line.120"></a>
+<span class="sourceLineNo">121</span> // remote call is failed. If the master crashed before we actually execute the procedure and<a name="line.121"></a>
+<span class="sourceLineNo">122</span> // persist the new state, it is fine to retry on the same target server again.<a name="line.122"></a>
+<span class="sourceLineNo">123</span> state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH_FAIL;<a name="line.123"></a>
+<span class="sourceLineNo">124</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.124"></a>
+<span class="sourceLineNo">125</span> } finally {<a name="line.125"></a>
+<span class="sourceLineNo">126</span> regionNode.unlock();<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span> }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span> @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span> public TableName getTableName() {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> return region.getTable();<a name="line.132"></a>
+<span class="sourceLineNo">133</span> }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span> @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span> if (TableName.isMetaTableName(getTableName())) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span> return false;<a name="line.138"></a>
+<span class="sourceLineNo">139</span> }<a name="line.139"></a>
+<span class="sourceLineNo">140</span> // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.140"></a>
+<span class="sourceLineNo">141</span> // fail when updating meta so we wait until it is assigned.<a name="line.141"></a>
+<span class="sourceLineNo">142</span> AssignmentManager am = env.getAssignmentManager();<a name="line.142"></a>
+<span class="sourceLineNo">143</span> return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, region);<a name="line.143"></a>
+<span class="sourceLineNo">144</span> }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span> @Override<a name="line.146"></a>
+<span class="sourceLineNo">147</span> protected void rollback(MasterProcedureEnv env) throws IOException, InterruptedException {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> throw new UnsupportedOperationException();<a name="line.148"></a>
+<span class="sourceLineNo">149</span> }<a name="line.149"></a>
+<span class="sourceLineNo">150</span><a name="line.150"></a>
+<span class="sourceLineNo">151</span> @Override<a name="line.151"></a>
+<span class="sourceLineNo">152</span> protected boolean abort(MasterProcedureEnv env) {<a name="line.152"></a>
+<span class="sourceLineNo">153</span> return false;<a name="line.153"></a>
+<span class="sourceLineNo">154</span> }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span> // do some checks to see if the report is valid, without actually updating meta.<a name="line.156"></a>
+<span class="sourceLineNo">157</span> protected abstract void reportTransition(RegionStateNode regionNode,<a name="line.157"></a>
+<span class="sourceLineNo">158</span> TransitionCode transitionCode, long seqId) throws IOException;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span> // A bit strange but the procedure store will throw RuntimeException if we can not persist the<a name="line.160"></a>
+<span class="sourceLineNo">161</span> // state, so upper layer should take care of this...<a name="line.161"></a>
+<span class="sourceLineNo">162</span> private void persistAndWake(MasterProcedureEnv env, RegionStateNode regionNode) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span> env.getMasterServices().getMasterProcedureExecutor().getStore().update(this);<a name="line.163"></a>
+<span class="sourceLineNo">164</span> regionNode.getProcedureEvent().wake(env.getProcedureScheduler());<a name="line.164"></a>
+<span class="sourceLineNo">165</span> }<a name="line.165"></a>
+<span class="sourceLineNo">166</span><a name="line.166"></a>
+<span class="sourceLineNo">167</span> // should be called with RegionStateNode locked, to avoid race with the execute method below<a name="line.167"></a>
+<span class="sourceLineNo">168</span> void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode, ServerName serverName,<a name="line.168"></a>
+<span class="sourceLineNo">169</span> TransitionCode transitionCode, long seqId) throws IOException {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> if (state != RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span> // should be a retry<a name="line.171"></a>
+<span class="sourceLineNo">172</span> return;<a name="line.172"></a>
+<span class="sourceLineNo">173</span> }<a name="line.173"></a>
+<span class="sourceLineNo">174</span> if (!targetServer.equals(serverName)) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> throw new UnexpectedStateException("Received report from " + serverName + ", expected " +<a name="line.175"></a>
+<span class="sourceLineNo">176</span> targetServer + ", " + regionNode + ", proc=" + this);<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> reportTransition(regionNode, transitionCode, seqId);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> // this state means we have received the report from RS, does not mean the result is fine, as we<a name="line.179"></a>
+<span class="sourceLineNo">180</span> // may received a FAILED_OPEN.<a name="line.180"></a>
+<span class="sourceLineNo">181</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_REPORT_SUCCEED;<a name="line.181"></a>
+<span class="sourceLineNo">182</span> this.transitionCode = transitionCode;<a name="line.182"></a>
+<span class="sourceLineNo">183</span> this.seqId = seqId;<a name="line.183"></a>
+<span class="sourceLineNo">184</span> // Persist the transition code and openSeqNum(if provided).<a name="line.184"></a>
+<span class="sourceLineNo">185</span> // We should not update the hbase:meta directly as this may cause races when master restarts,<a name="line.185"></a>
+<span class="sourceLineNo">186</span> // as the old active master may incorrectly report back to RS and cause the new master to hang<a name="line.186"></a>
+<span class="sourceLineNo">187</span> // on a OpenRegionProcedure forever. See HBASE-22060 and HBASE-22074 for more details.<a name="line.187"></a>
+<span class="sourceLineNo">188</span> boolean succ = false;<a name="line.188"></a>
+<span class="sourceLineNo">189</span> try {<a name="line.189"></a>
+<span class="sourceLineNo">190</span> persistAndWake(env, regionNode);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> succ = true;<a name="line.191"></a>
+<span class="sourceLineNo">192</span> } finally {<a name="line.192"></a>
+<span class="sourceLineNo">193</span> if (!succ) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH;<a name="line.194"></a>
+<span class="sourceLineNo">195</span> this.transitionCode = null;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> this.seqId = HConstants.NO_SEQNUM;<a name="line.196"></a>
+<span class="sourceLineNo">197</span> }<a name="line.197"></a>
+<span class="sourceLineNo">198</span> }<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode, ServerName serverName) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span> if (state != RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> // should be a retry<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_SERVER_CRASH;<a name="line.206"></a>
+<span class="sourceLineNo">207</span> boolean succ = false;<a name="line.207"></a>
+<span class="sourceLineNo">208</span> try {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> persistAndWake(env, regionNode);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> succ = true;<a name="line.210"></a>
+<span class="sourceLineNo">211</span> } finally {<a name="line.211"></a>
+<span class="sourceLineNo">212</span> if (!succ) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> this.state = RegionRemoteProcedureBaseState.REGION_REMOTE_PROCEDURE_DISPATCH;<a name="line.213"></a>
+<span class="sourceLineNo">214</span> }<a name="line.214"></a>
+<span class="sourceLineNo">215</span> }<a name="line.215"></a>
+<span class="sourceLineNo">216</span> }<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span> private TransitRegionStateProcedure getParent(MasterProcedureEnv env) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span> return (TransitRegionStateProcedure) env.getMasterServices().getMasterProcedureExecutor()<a name="line.219"></a>
+<span class="sourceLineNo">220</span> .getProcedure(getParentProcId());<a name="line.220"></a>
+<span class="sourceLineNo">221</span> }<a name="line.221"></a>
+<span class="sourceLineNo">222</span><a name="line.222"></a>
+<span class="sourceLineNo">223</span> private void unattach(MasterProcedureEnv env) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> getParent(env).unattachRemoteProc(this);<a name="line.224"></a>
+<span class="sourceLineNo">225</span> }<a name="line.225"></a>
+<span class="sourceLineNo">226</span><a name="line.226"></a>
+<span class="sourceLineNo">227</span> // actually update the state to meta<a name="line.227"></a>
+<span class="sourceLineNo">228</span> protected abstract void updateTransition(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.228"></a>
+<span class="sourceLineNo">229</span> TransitionCode transitionCode, long seqId) throws IOException;<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span> @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span> protected Procedure<MasterProcedureEnv>[] execute(MasterProcedureEnv env)<a name="line.232"></a>
+<span class="sourceLineNo">233</span> throws ProcedureYieldException, ProcedureSuspendedException, InterruptedException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span> RegionStateNode regionNode = getRegionNode(env);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> regionNode.lock();<a name="line.235"></a>
+<span class="sourceLineNo">236</span> try {<a name="line.236"></a>
+<span class="sourceLineNo">237</span> switch (state) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span> case REGION_REMOTE_PROCEDURE_DISPATCH: {<a name="line.238"></a>
+<span class="sourceLineNo">239</span> // The code which wakes us up also needs to lock the RSN so here we do not need to<a name="line.239"></a>
+<span class="sourceLineNo">240</span> // synchronize<a name="line.240"></a>
+<span class="sourceLineNo">241</span> // on the event.<a name="line.241"></a>
+<span class="sourceLineNo">242</span> ProcedureEvent<?> event = regionNode.getProcedureEvent();<a name="line.242"></a>
+<span class="sourceLineNo">243</span> try {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> env.getRemoteDispatcher().addOperationToNode(targetServer, this);<a name="line.244"></a>
+<span class="sourceLineNo">245</span> } catch (FailedRemoteDispatchException e) {<a name="line.245"></a>
+<span class="sourceLineNo">246</span> LOG.warn("Can not add remote operation {} for region {} to server {}, this usually " +<a name="line.246"></a>
+<span class="sourceLineNo">247</span> "because the server is alread dead, give up and mark the procedure as complete, " +<a name="line.247"></a>
+<span class="sourceLineNo">248</span> "the parent procedure will take care of this.", this, region, targetServer, e);<a name="line.248"></a>
+<span class="sourceLineNo">249</span> unattach(env);<a name="line.249"></a>
+<span class="sourceLineNo">250</span> return null;<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span> event.suspend();<a name="line.252"></a>
+<span class="sourceLineNo">253</span> event.suspendIfNotReady(this);<a name="line.253"></a>
+<span class="sourceLineNo">254</span> throw new ProcedureSuspendedException();<a name="line.254"></a>
+<span class="sourceLineNo">255</span> }<a name="line.255"></a>
+<span class="sourceLineNo">256</span> case REGION_REMOTE_PROCEDURE_REPORT_SUCCEED:<a name="line.256"></a>
+<span class="sourceLineNo">257</span> updateTransition(env, regionNode, transitionCode, seqId);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> unattach(env);<a name="line.258"></a>
+<span class="sourceLineNo">259</span> return null;<a name="line.259"></a>
+<span class="sourceLineNo">260</span> case REGION_REMOTE_PROCEDURE_DISPATCH_FAIL:<a name="line.260"></a>
+<span class="sourceLineNo">261</span> // the remote call is failed so we do not need to change the region state, just return.<a name="line.261"></a>
+<span class="sourceLineNo">262</span> unattach(env);<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return null;<a name="line.263"></a>
+<span class="sourceLineNo">264</span> case REGION_REMOTE_PROCEDURE_SERVER_CRASH:<a name="line.264"></a>
+<span class="sourceLineNo">265</span> env.getAssignmentManager().regionClosed(regionNode, false);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> unattach(env);<a name="line.266"></a>
+<span class="sourceLineNo">267</span> return null;<a name="line.267"></a>
+<span class="sourceLineNo">268</span> default:<a name="line.268"></a>
+<span class="sourceLineNo">269</span> throw new IllegalStateException("Unknown state: " + state);<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span> } catch (IOException e) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> if (retryCounter == null) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());<a name="line.273"></a>
+<span class="sourceLineNo">274</span> }<a name="line.274"></a>
+<span class="sourceLineNo">275</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.275"></a>
+<span class="sourceLineNo">276</span> LOG.warn("Failed updating meta, suspend {}secs {}; {};", backoff / 1000, this, regionNode, e);<a name="line.276"></a>
+<span class="sourceLineNo">277</span> setTimeout(Math.toIntExact(backoff));<a name="line.277"></a>
+<span class="sourceLineNo">278</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> skipPersistence();<a name="line.279"></a>
+<span class="sourceLineNo">280</span> throw new ProcedureSuspendedException();<a name="line.280"></a>
+<span class="sourceLineNo">281</span> } finally {<a name="line.281"></a>
+<span class="sourceLineNo">282</span> regionNode.unlock();<a name="line.282"></a>
+<span class="sourceLineNo">283</span> }<a name="line.283"></a>
+<span class="sourceLineNo">284</span> }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span> @Override<a name="line.286"></a>
+<span class="sourceLineNo">287</span> public boolean storeInDispatchedQueue() {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> return false;<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> RegionRemoteProcedureBaseStateData.Builder builder =<a name="line.293"></a>
+<span class="sourceLineNo">294</span> RegionRemoteProcedureBaseStateData.newBuilder().setRegion(ProtobufUtil.toRegionInfo(region))<a name="line.294"></a>
+<span class="sourceLineNo">295</span> .setTargetServer(ProtobufUtil.toServerName(targetServer)).setState(state);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (transitionCode != null) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> builder.setTransitionCode(transitionCode);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> builder.setSeqId(seqId);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> }<a name="line.299"></a>
+<span class="sourceLineNo">300</span> serializer.serialize(builder.build());<a name="line.300"></a>
+<span class="sourceLineNo">301</span> }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span> @Override<a name="line.303"></a>
+<span class="sourceLineNo">304</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.304"></a>
+<span class="sourceLineNo">305</span> RegionRemoteProcedureBaseStateData data =<a name="line.305"></a>
+<span class="sourceLineNo">306</span> serializer.deserialize(RegionRemoteProcedureBaseStateData.class);<a name="line.306"></a>
+<span class="sourceLineNo">307</span> region = ProtobufUtil.toRegionInfo(data.getRegion());<a name="line.307"></a>
+<span class="sourceLineNo">308</span> targetServer = ProtobufUtil.toServerName(data.getTargetServer());<a name="line.308"></a>
+<span class="sourceLineNo">309</span> state = data.getState();<a name="line.309"></a>
+<span class="sourceLineNo">310</span> if (data.hasTransitionCode()) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span> transitionCode = data.getTransitionCode();<a name="line.311"></a>
+<span class="sourceLineNo">312</span> seqId = data.getSeqId();<a name="line.312"></a>
+<span class="sourceLineNo">313</span> }<a name="line.313"></a>
+<span class="sourceLineNo">314</span> }<a name="line.314"></a>
+<span class="sourceLineNo">315</span><a name="line.315"></a>
+<span class="sourceLineNo">316</span> @Override<a name="line.316"></a>
+<span class="sourceLineNo">317</span> protected void afterReplay(MasterProcedureEnv env) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> getParent(env).attachRemoteProc(this);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>}<a name="line.320"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
index 05e9fa7..6c6c639 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html
@@ -44,522 +44,526 @@
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.slf4j.Logger;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.slf4j.LoggerFactory;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionStateData;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * The procedure to deal with the state transition of a region. A region with a TRSP in place is<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * called RIT, i.e, RegionInTransition.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * <p/><a name="line.55"></a>
-<span class="sourceLineNo">056</span> * It can be used to assign/unassign/reopen/move a region, and for<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * {@link #unassign(MasterProcedureEnv, RegionInfo)} and<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * {@link #reopen(MasterProcedureEnv, RegionInfo)}, you do not need to specify a target server, and<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * for {@link #assign(MasterProcedureEnv, RegionInfo, ServerName)} and<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you want to you can provide a<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * target server. And for {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you do not<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * specify a targetServer, we will select one randomly.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * <p/><a name="line.63"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.slf4j.Logger;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.slf4j.LoggerFactory;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionStateData;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * The procedure to deal with the state transition of a region. A region with a TRSP in place is<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * called RIT, i.e, RegionInTransition.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * <p/><a name="line.56"></a>
+<span class="sourceLineNo">057</span> * It can be used to assign/unassign/reopen/move a region, and for<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * {@link #unassign(MasterProcedureEnv, RegionInfo)} and<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * {@link #reopen(MasterProcedureEnv, RegionInfo)}, you do not need to specify a target server, and<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * for {@link #assign(MasterProcedureEnv, RegionInfo, ServerName)} and<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you want to you can provide a<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * target server. And for {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you do not<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * specify a targetServer, we will select one randomly.<a name="line.63"></a>
<span class="sourceLineNo">064</span> * <p/><a name="line.64"></a>
-<span class="sourceLineNo">065</span> * The typical state transition for assigning a region is:<a name="line.65"></a>
-<span class="sourceLineNo">066</span> *<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * <pre><a name="line.67"></a>
-<span class="sourceLineNo">068</span> * GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * </pre><a name="line.69"></a>
-<span class="sourceLineNo">070</span> *<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * Notice that, if there are failures we may go back to the {@code GET_ASSIGN_CANDIDATE} state to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * try again.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <p/><a name="line.73"></a>
-<span class="sourceLineNo">074</span> * The typical state transition for unassigning a region is:<a name="line.74"></a>
-<span class="sourceLineNo">075</span> *<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * <pre><a name="line.76"></a>
-<span class="sourceLineNo">077</span> * CLOSE -----> CONFIRM_CLOSED<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * </pre><a name="line.78"></a>
-<span class="sourceLineNo">079</span> *<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Here things go a bit different, if there are failures, especially that if there is a server<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * crash, we will go to the {@code GET_ASSIGN_CANDIDATE} state to bring the region online first, and<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * then go through the normal way to unassign it.<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * <p/><a name="line.83"></a>
-<span class="sourceLineNo">084</span> * The typical state transition for reopening/moving a region is:<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * <pre><a name="line.86"></a>
-<span class="sourceLineNo">087</span> * CLOSE -----> CONFIRM_CLOSED -----> GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * </pre><a name="line.88"></a>
-<span class="sourceLineNo">089</span> *<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * The retry logic is the same with the above assign/unassign.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * <p/><a name="line.91"></a>
-<span class="sourceLineNo">092</span> * Notice that, although we allow specify a target server, it just acts as a candidate, we do not<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * guarantee that the region will finally be on the target server. If this is important for you, you<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * should check whether the region is on the target server after the procedure is finished.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * <p/><a name="line.95"></a>
-<span class="sourceLineNo">096</span> * When you want to schedule a TRSP, please check whether there is still one for this region, and<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * the check should be under the RegionStateNode lock. We will remove the TRSP from a<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * RegionStateNode when we are done, see the code in {@code reportTransition} method below. There<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * could be at most one TRSP for a give region.<a name="line.99"></a>
-<span class="sourceLineNo">100</span> */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>@InterfaceAudience.Private<a name="line.101"></a>
-<span class="sourceLineNo">102</span>public class TransitRegionStateProcedure<a name="line.102"></a>
-<span class="sourceLineNo">103</span> extends AbstractStateMachineRegionProcedure<RegionStateTransitionState> {<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span> private static final Logger LOG = LoggerFactory.getLogger(TransitRegionStateProcedure.class);<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> private TransitionType type;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span> private RegionStateTransitionState initialState;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> private RegionStateTransitionState lastState;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> // the candidate where we want to assign the region to.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> private ServerName assignCandidate;<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> private boolean forceNewPlan;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> private int attempt;<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span> private RegionRemoteProcedureBase remoteProc;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span> public TransitRegionStateProcedure() {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> private void setInitalAndLastState() {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> switch (type) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span> case ASSIGN:<a name="line.127"></a>
-<span class="sourceLineNo">128</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE;<a name="line.128"></a>
-<span class="sourceLineNo">129</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.129"></a>
-<span class="sourceLineNo">130</span> break;<a name="line.130"></a>
-<span class="sourceLineNo">131</span> case UNASSIGN:<a name="line.131"></a>
-<span class="sourceLineNo">132</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.132"></a>
-<span class="sourceLineNo">133</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED;<a name="line.133"></a>
-<span class="sourceLineNo">134</span> break;<a name="line.134"></a>
-<span class="sourceLineNo">135</span> case MOVE:<a name="line.135"></a>
-<span class="sourceLineNo">136</span> case REOPEN:<a name="line.136"></a>
-<span class="sourceLineNo">137</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.137"></a>
-<span class="sourceLineNo">138</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.138"></a>
-<span class="sourceLineNo">139</span> break;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> default:<a name="line.140"></a>
-<span class="sourceLineNo">141</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.141"></a>
-<span class="sourceLineNo">142</span> }<a name="line.142"></a>
-<span class="sourceLineNo">143</span> }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span> @VisibleForTesting<a name="line.145"></a>
-<span class="sourceLineNo">146</span> protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,<a name="line.146"></a>
-<span class="sourceLineNo">147</span> ServerName assignCandidate, boolean forceNewPlan, TransitionType type) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span> super(env, hri);<a name="line.148"></a>
-<span class="sourceLineNo">149</span> this.assignCandidate = assignCandidate;<a name="line.149"></a>
-<span class="sourceLineNo">150</span> this.forceNewPlan = forceNewPlan;<a name="line.150"></a>
-<span class="sourceLineNo">151</span> this.type = type;<a name="line.151"></a>
-<span class="sourceLineNo">152</span> setInitalAndLastState();<a name="line.152"></a>
-<span class="sourceLineNo">153</span> }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span> public TableOperationType getTableOperationType() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span> // TODO: maybe we should make another type here, REGION_TRANSITION?<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return TableOperationType.REGION_EDIT;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span> @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (TableName.isMetaTableName(getTableName())) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> return false;<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span> // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.166"></a>
-<span class="sourceLineNo">167</span> // fail when updating meta so we wait until it is assigned.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> AssignmentManager am = env.getAssignmentManager();<a name="line.168"></a>
-<span class="sourceLineNo">169</span> return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span> private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throws ProcedureSuspendedException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> // Here the assumption is that, the region must be in CLOSED state, so the region location<a name="line.174"></a>
-<span class="sourceLineNo">175</span> // will be null. And if we fail to open the region and retry here, the forceNewPlan will be<a name="line.175"></a>
-<span class="sourceLineNo">176</span> // true, and also we will set the region location to null.<a name="line.176"></a>
-<span class="sourceLineNo">177</span> boolean retain = false;<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (!forceNewPlan) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (assignCandidate != null) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> retain = assignCandidate.equals(regionNode.getLastHost());<a name="line.180"></a>
-<span class="sourceLineNo">181</span> regionNode.setRegionLocation(assignCandidate);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> } else if (regionNode.getLastHost() != null) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> retain = true;<a name="line.183"></a>
-<span class="sourceLineNo">184</span> LOG.info("Setting lastHost as the region location {}", regionNode.getLastHost());<a name="line.184"></a>
-<span class="sourceLineNo">185</span> regionNode.setRegionLocation(regionNode.getLastHost());<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span> }<a name="line.187"></a>
-<span class="sourceLineNo">188</span> LOG.info("Starting {}; {}; forceNewPlan={}, retain={}", this, regionNode.toShortString(),<a name="line.188"></a>
-<span class="sourceLineNo">189</span> forceNewPlan, retain);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> env.getAssignmentManager().queueAssign(regionNode);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_OPEN);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span> throw new ProcedureSuspendedException();<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> private void openRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> ServerName loc = regionNode.getRegionLocation();<a name="line.198"></a>
-<span class="sourceLineNo">199</span> if (loc == null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> LOG.warn("No location specified for {}, jump back to state {} to get one", getRegion(),<a name="line.200"></a>
-<span class="sourceLineNo">201</span> RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.201"></a>
-<span class="sourceLineNo">202</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.202"></a>
-<span class="sourceLineNo">203</span> return;<a name="line.203"></a>
-<span class="sourceLineNo">204</span> }<a name="line.204"></a>
-<span class="sourceLineNo">205</span> env.getAssignmentManager().regionOpening(regionNode);<a name="line.205"></a>
-<span class="sourceLineNo">206</span> addChildProcedure(new OpenRegionProcedure(this, getRegion(), loc));<a name="line.206"></a>
-<span class="sourceLineNo">207</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> private Flow confirmOpened(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.210"></a>
-<span class="sourceLineNo">211</span> throws IOException {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> if (regionNode.isInState(State.OPEN)) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> attempt = 0;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // we are the last state, finish<a name="line.215"></a>
-<span class="sourceLineNo">216</span> regionNode.unsetProcedure(this);<a name="line.216"></a>
-<span class="sourceLineNo">217</span> ServerCrashProcedure.updateProgress(env, getParentProcId());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> return Flow.NO_MORE_STATE;<a name="line.218"></a>
-<span class="sourceLineNo">219</span> }<a name="line.219"></a>
-<span class="sourceLineNo">220</span> // It is possible that we arrive here but confirm opened is not the last state, for example,<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // when merging or splitting a region, we unassign the region from a RS and the RS is crashed,<a name="line.221"></a>
-<span class="sourceLineNo">222</span> // then there will be recovered edits for this region, we'd better make the region online<a name="line.222"></a>
-<span class="sourceLineNo">223</span> // again and then unassign it, otherwise we have to fail the merge/split procedure as we may<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // loss data.<a name="line.224"></a>
-<span class="sourceLineNo">225</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.225"></a>
-<span class="sourceLineNo">226</span> return Flow.HAS_MORE_STATE;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span> int retries = env.getAssignmentManager().getRegionStates().addToFailedOpen(regionNode)<a name="line.229"></a>
-<span class="sourceLineNo">230</span> .incrementAndGetRetries();<a name="line.230"></a>
-<span class="sourceLineNo">231</span> int maxAttempts = env.getAssignmentManager().getAssignMaxAttempts();<a name="line.231"></a>
-<span class="sourceLineNo">232</span> LOG.info("Retry={} of max={}; {}; {}", retries, maxAttempts, this, regionNode.toShortString());<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span> if (retries >= maxAttempts) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> env.getAssignmentManager().regionFailedOpen(regionNode, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> setFailure(getClass().getSimpleName(), new RetriesExhaustedException(<a name="line.236"></a>
-<span class="sourceLineNo">237</span> "Max attempts " + env.getAssignmentManager().getAssignMaxAttempts() + " exceeded"));<a name="line.237"></a>
-<span class="sourceLineNo">238</span> regionNode.unsetProcedure(this);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return Flow.NO_MORE_STATE;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span> env.getAssignmentManager().regionFailedOpen(regionNode, false);<a name="line.242"></a>
-<span class="sourceLineNo">243</span> // we failed to assign the region, force a new plan<a name="line.243"></a>
-<span class="sourceLineNo">244</span> forceNewPlan = true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span> regionNode.setRegionLocation(null);<a name="line.245"></a>
-<span class="sourceLineNo">246</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> if (retries > env.getAssignmentManager().getAssignRetryImmediatelyMaxAttempts()) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> // Throw exception to backoff and retry when failed open too many times<a name="line.249"></a>
-<span class="sourceLineNo">250</span> throw new HBaseIOException("Failed to open region");<a name="line.250"></a>
-<span class="sourceLineNo">251</span> } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span> // Here we do not throw exception because we want to the region to be online ASAP<a name="line.252"></a>
-<span class="sourceLineNo">253</span> return Flow.HAS_MORE_STATE;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span> }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> private void closeRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.257"></a>
-<span class="sourceLineNo">258</span> if (regionNode.isInState(State.OPEN, State.CLOSING, State.MERGING, State.SPLITTING)) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span> // this is the normal case<a name="line.259"></a>
-<span class="sourceLineNo">260</span> env.getAssignmentManager().regionClosing(regionNode);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> addChildProcedure(new CloseRegionProcedure(this, getRegion(), regionNode.getRegionLocation(),<a name="line.261"></a>
-<span class="sourceLineNo">262</span> assignCandidate));<a name="line.262"></a>
-<span class="sourceLineNo">263</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED);<a name="line.263"></a>
-<span class="sourceLineNo">264</span> } else {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> forceNewPlan = true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> regionNode.setRegionLocation(null);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> }<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span> private Flow confirmClosed(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> if (regionNode.isInState(State.CLOSED)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span> attempt = 0;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> // we are the last state, finish<a name="line.276"></a>
-<span class="sourceLineNo">277</span> regionNode.unsetProcedure(this);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> return Flow.NO_MORE_STATE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> // This means we need to open the region again, should be a move or reopen<a name="line.280"></a>
-<span class="sourceLineNo">281</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.281"></a>
-<span class="sourceLineNo">282</span> return Flow.HAS_MORE_STATE;<a name="line.282"></a>
-<span class="sourceLineNo">283</span> }<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (regionNode.isInState(State.CLOSING)) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> // This is possible, think the target RS crashes and restarts immediately, the close region<a name="line.285"></a>
-<span class="sourceLineNo">286</span> // operation will return a NotServingRegionException soon, we can only recover after SCP takes<a name="line.286"></a>
-<span class="sourceLineNo">287</span> // care of this RS. So here we throw an IOException to let upper layer to retry with backoff.<a name="line.287"></a>
-<span class="sourceLineNo">288</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new HBaseIOException("Failed to close region");<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> // abnormally closed, need to reopen it, no matter what is the last state, see the comment in<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // confirmOpened for more details that why we need to reopen the region first even if we just<a name="line.292"></a>
-<span class="sourceLineNo">293</span> // want to close it.<a name="line.293"></a>
-<span class="sourceLineNo">294</span> // The only exception is for non-default replica, where we do not need to deal with recovered<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // edits. Notice that the region will remain in ABNORMALLY_CLOSED state, the upper layer need to<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // deal with this state. For non-default replica, this is usually the same with CLOSED.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> assert regionNode.isInState(State.ABNORMALLY_CLOSED);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (!RegionReplicaUtil.isDefaultReplica(getRegion()) &&<a name="line.298"></a>
-<span class="sourceLineNo">299</span> lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> regionNode.unsetProcedure(this);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return Flow.NO_MORE_STATE;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> attempt = 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.304"></a>
-<span class="sourceLineNo">305</span> return Flow.HAS_MORE_STATE;<a name="line.305"></a>
-<span class="sourceLineNo">306</span> }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span> // Override to lock RegionStateNode<a name="line.308"></a>
-<span class="sourceLineNo">309</span> @SuppressWarnings("rawtypes")<a name="line.309"></a>
-<span class="sourceLineNo">310</span> @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span> protected Procedure[] execute(MasterProcedureEnv env)<a name="line.311"></a>
-<span class="sourceLineNo">312</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> RegionStateNode regionNode =<a name="line.313"></a>
-<span class="sourceLineNo">314</span> env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.314"></a>
-<span class="sourceLineNo">315</span> regionNode.lock();<a name="line.315"></a>
-<span class="sourceLineNo">316</span> try {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> return super.execute(env);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> } finally {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> regionNode.unlock();<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span> private RegionStateNode getRegionStateNode(MasterProcedureEnv env) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> @Override<a name="line.327"></a>
-<span class="sourceLineNo">328</span> protected Flow executeFromState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.328"></a>
-<span class="sourceLineNo">329</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> RegionStateNode regionNode = getRegionStateNode(env);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> try {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> switch (state) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span> case REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE:<a name="line.333"></a>
-<span class="sourceLineNo">334</span> queueAssign(env, regionNode);<a name="line.334"></a>
-<span class="sourceLineNo">335</span> return Flow.HAS_MORE_STATE;<a name="line.335"></a>
-<span class="sourceLineNo">336</span> case REGION_STATE_TRANSITION_OPEN:<a name="line.336"></a>
-<span class="sourceLineNo">337</span> openRegion(env, regionNode);<a name="line.337"></a>
-<span class="sourceLineNo">338</span> return Flow.HAS_MORE_STATE;<a name="line.338"></a>
-<span class="sourceLineNo">339</span> case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return confirmOpened(env, regionNode);<a name="line.340"></a>
-<span class="sourceLineNo">341</span> case REGION_STATE_TRANSITION_CLOSE:<a name="line.341"></a>
-<span class="sourceLineNo">342</span> closeRegion(env, regionNode);<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return Flow.HAS_MORE_STATE;<a name="line.343"></a>
-<span class="sourceLineNo">344</span> case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.344"></a>
-<span class="sourceLineNo">345</span> return confirmClosed(env, regionNode);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> default:<a name="line.346"></a>
-<span class="sourceLineNo">347</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span> long backoff = ProcedureUtil.getBackoffTimeMs(this.attempt++);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> LOG.warn(<a name="line.351"></a>
-<span class="sourceLineNo">352</span> "Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.352"></a>
-<span class="sourceLineNo">353</span> "by other Procedure or operator intervention",<a name="line.353"></a>
-<span class="sourceLineNo">354</span> backoff / 1000, this, regionNode.toShortString(), e);<a name="line.354"></a>
-<span class="sourceLineNo">355</span> setTimeout(Math.toIntExact(backoff));<a name="line.355"></a>
-<span class="sourceLineNo">356</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.356"></a>
-<span class="sourceLineNo">357</span> skipPersistence();<a name="line.357"></a>
-<span class="sourceLineNo">358</span> throw new ProcedureSuspendedException();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span> /**<a name="line.362"></a>
-<span class="sourceLineNo">363</span> * At end of timeout, wake ourselves up so we run again.<a name="line.363"></a>
-<span class="sourceLineNo">364</span> */<a name="line.364"></a>
-<span class="sourceLineNo">365</span> @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> env.getProcedureScheduler().addFront(this);<a name="line.368"></a>
-<span class="sourceLineNo">369</span> return false; // 'false' means that this procedure handled the timeout<a name="line.369"></a>
-<span class="sourceLineNo">370</span> }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span> // Should be called with RegionStateNode locked<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.373"></a>
-<span class="sourceLineNo">374</span> ServerName serverName, TransitionCode code, long seqId, long procId) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> if (remoteProc == null) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> LOG.warn(<a name="line.376"></a>
-<span class="sourceLineNo">377</span> "There is no outstanding remote region procedure for {}, serverName={}, code={}," +<a name="line.377"></a>
-<span class="sourceLineNo">378</span> " seqId={}, proc={}, should be a retry, ignore",<a name="line.378"></a>
-<span class="sourceLineNo">379</span> regionNode, serverName, code, seqId, this);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> return;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> // The procId could be -1 if it is from an old region server, we need to deal with it so that we<a name="line.382"></a>
-<span class="sourceLineNo">383</span> // can do rolling upgraing.<a name="line.383"></a>
-<span class="sourceLineNo">384</span> if (procId >= 0 && remoteProc.getProcId() != procId) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span> LOG.warn(<a name="line.385"></a>
-<span class="sourceLineNo">386</span> "The pid of remote region procedure for {} is {}, the reported pid={}, serverName={}," +<a name="line.386"></a>
-<span class="sourceLineNo">387</span> " code={}, seqId={}, proc={}, should be a retry, ignore",<a name="line.387"></a>
-<span class="sourceLineNo">388</span> regionNode, remoteProc.getProcId(), procId, serverName, code, seqId, this);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> return;<a name="line.389"></a>
-<span class="sourceLineNo">390</span> }<a name="line.390"></a>
-<span class="sourceLineNo">391</span> remoteProc.reportTransition(env, regionNode, serverName, code, seqId);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> // Should be called with RegionStateNode locked<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.395"></a>
-<span class="sourceLineNo">396</span> ServerName serverName) throws IOException {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (remoteProc != null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span> // this means we are waiting for the sub procedure, so wake it up<a name="line.398"></a>
-<span class="sourceLineNo">399</span> remoteProc.serverCrashed(env, regionNode, serverName);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> } else {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> // we are in RUNNING state, just update the region state, and we will process it later.<a name="line.401"></a>
-<span class="sourceLineNo">402</span> env.getAssignmentManager().regionClosed(regionNode, false);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> void attachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> this.remoteProc = proc;<a name="line.407"></a>
+<span class="sourceLineNo">065</span> * <p/><a name="line.65"></a>
+<span class="sourceLineNo">066</span> * The typical state transition for assigning a region is:<a name="line.66"></a>
+<span class="sourceLineNo">067</span> *<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <pre><a name="line.68"></a>
+<span class="sourceLineNo">069</span> * GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * </pre><a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * Notice that, if there are failures we may go back to the {@code GET_ASSIGN_CANDIDATE} state to<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * try again.<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * <p/><a name="line.74"></a>
+<span class="sourceLineNo">075</span> * The typical state transition for unassigning a region is:<a name="line.75"></a>
+<span class="sourceLineNo">076</span> *<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * <pre><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * CLOSE -----> CONFIRM_CLOSED<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * </pre><a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Here things go a bit different, if there are failures, especially that if there is a server<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * crash, we will go to the {@code GET_ASSIGN_CANDIDATE} state to bring the region online first, and<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * then go through the normal way to unassign it.<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * <p/><a name="line.84"></a>
+<span class="sourceLineNo">085</span> * The typical state transition for reopening/moving a region is:<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * <pre><a name="line.87"></a>
+<span class="sourceLineNo">088</span> * CLOSE -----> CONFIRM_CLOSED -----> GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * </pre><a name="line.89"></a>
+<span class="sourceLineNo">090</span> *<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * The retry logic is the same with the above assign/unassign.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * <p/><a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Notice that, although we allow specify a target server, it just acts as a candidate, we do not<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * guarantee that the region will finally be on the target server. If this is important for you, you<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * should check whether the region is on the target server after the procedure is finished.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * <p/><a name="line.96"></a>
+<span class="sourceLineNo">097</span> * When you want to schedule a TRSP, please check whether there is still one for this region, and<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * the check should be under the RegionStateNode lock. We will remove the TRSP from a<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * RegionStateNode when we are done, see the code in {@code reportTransition} method below. There<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * could be at most one TRSP for a give region.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>@InterfaceAudience.Private<a name="line.102"></a>
+<span class="sourceLineNo">103</span>public class TransitRegionStateProcedure<a name="line.103"></a>
+<span class="sourceLineNo">104</span> extends AbstractStateMachineRegionProcedure<RegionStateTransitionState> {<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span> private static final Logger LOG = LoggerFactory.getLogger(TransitRegionStateProcedure.class);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span> private TransitionType type;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> private RegionStateTransitionState initialState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> private RegionStateTransitionState lastState;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> // the candidate where we want to assign the region to.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> private ServerName assignCandidate;<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span> private boolean forceNewPlan;<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span> private RetryCounter retryCounter;<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span> private RegionRemoteProcedureBase remoteProc;<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> public TransitRegionStateProcedure() {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> private void setInitalAndLastState() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span> switch (type) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> case ASSIGN:<a name="line.128"></a>
+<span class="sourceLineNo">129</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> break;<a name="line.131"></a>
+<span class="sourceLineNo">132</span> case UNASSIGN:<a name="line.132"></a>
+<span class="sourceLineNo">133</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.133"></a>
+<span class="sourceLineNo">134</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> break;<a name="line.135"></a>
+<span class="sourceLineNo">136</span> case MOVE:<a name="line.136"></a>
+<span class="sourceLineNo">137</span> case REOPEN:<a name="line.137"></a>
+<span class="sourceLineNo">138</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.138"></a>
+<span class="sourceLineNo">139</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> break;<a name="line.140"></a>
+<span class="sourceLineNo">141</span> default:<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.142"></a>
+<span class="sourceLineNo">143</span> }<a name="line.143"></a>
+<span class="sourceLineNo">144</span> }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span> @VisibleForTesting<a name="line.146"></a>
+<span class="sourceLineNo">147</span> protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,<a name="line.147"></a>
+<span class="sourceLineNo">148</span> ServerName assignCandidate, boolean forceNewPlan, TransitionType type) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span> super(env, hri);<a name="line.149"></a>
+<span class="sourceLineNo">150</span> this.assignCandidate = assignCandidate;<a name="line.150"></a>
+<span class="sourceLineNo">151</span> this.forceNewPlan = forceNewPlan;<a name="line.151"></a>
+<span class="sourceLineNo">152</span> this.type = type;<a name="line.152"></a>
+<span class="sourceLineNo">153</span> setInitalAndLastState();<a name="line.153"></a>
+<span class="sourceLineNo">154</span> }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span> public TableOperationType getTableOperationType() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // TODO: maybe we should make another type here, REGION_TRANSITION?<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return TableOperationType.REGION_EDIT;<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> if (TableName.isMetaTableName(getTableName())) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span> return false;<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span> // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.167"></a>
+<span class="sourceLineNo">168</span> // fail when updating meta so we wait until it is assigned.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> AssignmentManager am = env.getAssignmentManager();<a name="line.169"></a>
+<span class="sourceLineNo">170</span> return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());<a name="line.170"></a>
+<span class="sourceLineNo">171</span> }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span> private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.173"></a>
+<span class="sourceLineNo">174</span> throws ProcedureSuspendedException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // Here the assumption is that, the region must be in CLOSED state, so the region location<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // will be null. And if we fail to open the region and retry here, the forceNewPlan will be<a name="line.176"></a>
+<span class="sourceLineNo">177</span> // true, and also we will set the region location to null.<a name="line.177"></a>
+<span class="sourceLineNo">178</span> boolean retain = false;<a name="line.178"></a>
+<span class="sourceLineNo">179</span> if (!forceNewPlan) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span> if (assignCandidate != null) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> retain = assignCandidate.equals(regionNode.getLastHost());<a name="line.181"></a>
+<span class="sourceLineNo">182</span> regionNode.setRegionLocation(assignCandidate);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> } else if (regionNode.getLastHost() != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> retain = true;<a name="line.184"></a>
+<span class="sourceLineNo">185</span> LOG.info("Setting lastHost as the region location {}", regionNode.getLastHost());<a name="line.185"></a>
+<span class="sourceLineNo">186</span> regionNode.setRegionLocation(regionNode.getLastHost());<a name="line.186"></a>
+<span class="sourceLineNo">187</span> }<a name="line.187"></a>
+<span class="sourceLineNo">188</span> }<a name="line.188"></a>
+<span class="sourceLineNo">189</span> LOG.info("Starting {}; {}; forceNewPlan={}, retain={}", this, regionNode.toShortString(),<a name="line.189"></a>
+<span class="sourceLineNo">190</span> forceNewPlan, retain);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> env.getAssignmentManager().queueAssign(regionNode);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_OPEN);<a name="line.192"></a>
+<span class="sourceLineNo">193</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span> throw new ProcedureSuspendedException();<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> private void openRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.198"></a>
+<span class="sourceLineNo">199</span> ServerName loc = regionNode.getRegionLocation();<a name="line.199"></a>
+<span class="sourceLineNo">200</span> if (loc == null) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> LOG.warn("No location specified for {}, jump back to state {} to get one", getRegion(),<a name="line.201"></a>
+<span class="sourceLineNo">202</span> RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.202"></a>
+<span class="sourceLineNo">203</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> env.getAssignmentManager().regionOpening(regionNode);<a name="line.206"></a>
+<span class="sourceLineNo">207</span> addChildProcedure(new OpenRegionProcedure(this, getRegion(), loc));<a name="line.207"></a>
+<span class="sourceLineNo">208</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED);<a name="line.208"></a>
+<span class="sourceLineNo">209</span> }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> private Flow confirmOpened(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.211"></a>
+<span class="sourceLineNo">212</span> throws IOException {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> if (regionNode.isInState(State.OPEN)) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> retryCounter = null;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span> // we are the last state, finish<a name="line.216"></a>
+<span class="sourceLineNo">217</span> regionNode.unsetProcedure(this);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> ServerCrashProcedure.updateProgress(env, getParentProcId());<a name="line.218"></a>
+<span class="sourceLineNo">219</span> return Flow.NO_MORE_STATE;<a name="line.219"></a>
+<span class="sourceLineNo">220</span> }<a name="line.220"></a>
+<span class="sourceLineNo">221</span> // It is possible that we arrive here but confirm opened is not the last state, for example,<a name="line.221"></a>
+<span class="sourceLineNo">222</span> // when merging or splitting a region, we unassign the region from a RS and the RS is crashed,<a name="line.222"></a>
+<span class="sourceLineNo">223</span> // then there will be recovered edits for this region, we'd better make the region online<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // again and then unassign it, otherwise we have to fail the merge/split procedure as we may<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // loss data.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.226"></a>
+<span class="sourceLineNo">227</span> return Flow.HAS_MORE_STATE;<a name="line.227"></a>
+<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span> int retries = env.getAssignmentManager().getRegionStates().addToFailedOpen(regionNode)<a name="line.230"></a>
+<span class="sourceLineNo">231</span> .incrementAndGetRetries();<a name="line.231"></a>
+<span class="sourceLineNo">232</span> int maxAttempts = env.getAssignmentManager().getAssignMaxAttempts();<a name="line.232"></a>
+<span class="sourceLineNo">233</span> LOG.info("Retry={} of max={}; {}; {}", retries, maxAttempts, this, regionNode.toShortString());<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span> if (retries >= maxAttempts) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span> env.getAssignmentManager().regionFailedOpen(regionNode, true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> setFailure(getClass().getSimpleName(), new RetriesExhaustedException(<a name="line.237"></a>
+<span class="sourceLineNo">238</span> "Max attempts " + env.getAssignmentManager().getAssignMaxAttempts() + " exceeded"));<a name="line.238"></a>
+<span class="sourceLineNo">239</span> regionNode.unsetProcedure(this);<a name="line.239"></a>
+<span class="sourceLineNo">240</span> return Flow.NO_MORE_STATE;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span> env.getAssignmentManager().regionFailedOpen(regionNode, false);<a name="line.243"></a>
+<span class="sourceLineNo">244</span> // we failed to assign the region, force a new plan<a name="line.244"></a>
+<span class="sourceLineNo">245</span> forceNewPlan = true;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> regionNode.setRegionLocation(null);<a name="line.246"></a>
+<span class="sourceLineNo">247</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (retries > env.getAssignmentManager().getAssignRetryImmediatelyMaxAttempts()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // Throw exception to backoff and retry when failed open too many times<a name="line.250"></a>
+<span class="sourceLineNo">251</span> throw new HBaseIOException("Failed to open region");<a name="line.251"></a>
+<span class="sourceLineNo">252</span> } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Here we do not throw exception because we want to the region to be online ASAP<a name="line.253"></a>
+<span class="sourceLineNo">254</span> return Flow.HAS_MORE_STATE;<a name="line.254"></a>
+<span class="sourceLineNo">255</span> }<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> private void closeRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span> if (regionNode.isInState(State.OPEN, State.CLOSING, State.MERGING, State.SPLITTING)) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span> // this is the normal case<a name="line.260"></a>
+<span class="sourceLineNo">261</span> env.getAssignmentManager().regionClosing(regionNode);<a name="line.261"></a>
+<span class="sourceLineNo">262</span> addChildProcedure(new CloseRegionProcedure(this, getRegion(), regionNode.getRegionLocation(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span> assignCandidate));<a name="line.263"></a>
+<span class="sourceLineNo">264</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED);<a name="line.264"></a>
+<span class="sourceLineNo">265</span> } else {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> forceNewPlan = true;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> regionNode.setRegionLocation(null);<a name="line.267"></a>
+<span class="sourceLineNo">268</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span> private Flow confirmClosed(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.272"></a>
+<span class="sourceLineNo">273</span> throws IOException {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (regionNode.isInState(State.CLOSED)) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> retryCounter = null;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> // we are the last state, finish<a name="line.277"></a>
+<span class="sourceLineNo">278</span> regionNode.unsetProcedure(this);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> return Flow.NO_MORE_STATE;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span> // This means we need to open the region again, should be a move or reopen<a name="line.281"></a>
+<span class="sourceLineNo">282</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.282"></a>
+<span class="sourceLineNo">283</span> return Flow.HAS_MORE_STATE;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> }<a name="line.284"></a>
+<span class="sourceLineNo">285</span> if (regionNode.isInState(State.CLOSING)) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> // This is possible, think the target RS crashes and restarts immediately, the close region<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // operation will return a NotServingRegionException soon, we can only recover after SCP takes<a name="line.287"></a>
+<span class="sourceLineNo">288</span> // care of this RS. So here we throw an IOException to let upper layer to retry with backoff.<a name="line.288"></a>
+<span class="sourceLineNo">289</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span> throw new HBaseIOException("Failed to close region");<a name="line.290"></a>
+<span class="sourceLineNo">291</span> }<a name="line.291"></a>
+<span class="sourceLineNo">292</span> // abnormally closed, need to reopen it, no matter what is the last state, see the comment in<a name="line.292"></a>
+<span class="sourceLineNo">293</span> // confirmOpened for more details that why we need to reopen the region first even if we just<a name="line.293"></a>
+<span class="sourceLineNo">294</span> // want to close it.<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // The only exception is for non-default replica, where we do not need to deal with recovered<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // edits. Notice that the region will remain in ABNORMALLY_CLOSED state, the upper layer need to<a name="line.296"></a>
+<span class="sourceLineNo">297</span> // deal with this state. For non-default replica, this is usually the same with CLOSED.<a name="line.297"></a>
+<span class="sourceLineNo">298</span> assert regionNode.isInState(State.ABNORMALLY_CLOSED);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (!RegionReplicaUtil.isDefaultReplica(getRegion()) &&<a name="line.299"></a>
+<span class="sourceLineNo">300</span> lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> regionNode.unsetProcedure(this);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> return Flow.NO_MORE_STATE;<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> retryCounter = null;<a name="line.304"></a>
+<span class="sourceLineNo">305</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.305"></a>
+<span class="sourceLineNo">306</span> return Flow.HAS_MORE_STATE;<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span> // Override to lock RegionStateNode<a name="line.309"></a>
+<span class="sourceLineNo">310</span> @SuppressWarnings("rawtypes")<a name="line.310"></a>
+<span class="sourceLineNo">311</span> @Override<a name="line.311"></a>
+<span class="sourceLineNo">312</span> protected Procedure[] execute(MasterProcedureEnv env)<a name="line.312"></a>
+<span class="sourceLineNo">313</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.313"></a>
+<span class="sourceLineNo">314</span> RegionStateNode regionNode =<a name="line.314"></a>
+<span class="sourceLineNo">315</span> env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.315"></a>
+<span class="sourceLineNo">316</span> regionNode.lock();<a name="line.316"></a>
+<span class="sourceLineNo">317</span> try {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> return super.execute(env);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } finally {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> regionNode.unlock();<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span> private RegionStateNode getRegionStateNode(MasterProcedureEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span> return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.325"></a>
+<span class="sourceLineNo">326</span> }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span> @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span> protected Flow executeFromState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.329"></a>
+<span class="sourceLineNo">330</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> RegionStateNode regionNode = getRegionStateNode(env);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> try {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> switch (state) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span> case REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE:<a name="line.334"></a>
+<span class="sourceLineNo">335</span> queueAssign(env, regionNode);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> return Flow.HAS_MORE_STATE;<a name="line.336"></a>
+<span class="sourceLineNo">337</span> case REGION_STATE_TRANSITION_OPEN:<a name="line.337"></a>
+<span class="sourceLineNo">338</span> openRegion(env, regionNode);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> return Flow.HAS_MORE_STATE;<a name="line.339"></a>
+<span class="sourceLineNo">340</span> case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.340"></a>
+<span class="sourceLineNo">341</span> return confirmOpened(env, regionNode);<a name="line.341"></a>
+<span class="sourceLineNo">342</span> case REGION_STATE_TRANSITION_CLOSE:<a name="line.342"></a>
+<span class="sourceLineNo">343</span> closeRegion(env, regionNode);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return Flow.HAS_MORE_STATE;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.345"></a>
+<span class="sourceLineNo">346</span> return confirmClosed(env, regionNode);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> default:<a name="line.347"></a>
+<span class="sourceLineNo">348</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span> } catch (IOException e) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span> if (retryCounter == null) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span> retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.354"></a>
+<span class="sourceLineNo">355</span> LOG.warn(<a name="line.355"></a>
+<span class="sourceLineNo">356</span> "Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.356"></a>
+<span class="sourceLineNo">357</span> "by other Procedure or operator intervention",<a name="line.357"></a>
+<span class="sourceLineNo">358</span> backoff / 1000, this, regionNode.toShortString(), e);<a name="line.358"></a>
+<span class="sourceLineNo">359</span> setTimeout(Math.toIntExact(backoff));<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> skipPersistence();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> throw new ProcedureSuspendedException();<a name="line.362"></a>
+<span class="sourceLineNo">363</span> }<a name="line.363"></a>
+<span class="sourceLineNo">364</span> }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> /**<a name="line.366"></a>
+<span class="sourceLineNo">367</span> * At end of timeout, wake ourselves up so we run again.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> */<a name="line.368"></a>
+<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
+<span class="sourceLineNo">370</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> env.getProcedureScheduler().addFront(this);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false; // 'false' means that this procedure handled the timeout<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> // Should be called with RegionStateNode locked<a name="line.376"></a>
+<span class="sourceLineNo">377</span> public void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.377"></a>
+<span class="sourceLineNo">378</span> ServerName serverName, TransitionCode code, long seqId, long procId) throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (remoteProc == null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> LOG.warn(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "There is no outstanding remote region procedure for {}, serverName={}, code={}," +<a name="line.381"></a>
+<span class="sourceLineNo">382</span> " seqId={}, proc={}, should be a retry, ignore",<a name="line.382"></a>
+<span class="sourceLineNo">383</span> regionNode, serverName, code, seqId, this);<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> // The procId could be -1 if it is from an old region server, we need to deal with it so that we<a name="line.386"></a>
+<span class="sourceLineNo">387</span> // can do rolling upgraing.<a name="line.387"></a>
+<span class="sourceLineNo">388</span> if (procId >= 0 && remoteProc.getProcId() != procId) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span> LOG.warn(<a name="line.389"></a>
+<span class="sourceLineNo">390</span> "The pid of remote region procedure for {} is {}, the reported pid={}, serverName={}," +<a name="line.390"></a>
+<span class="sourceLineNo">391</span> " code={}, seqId={}, proc={}, should be a retry, ignore",<a name="line.391"></a>
+<span class="sourceLineNo">392</span> regionNode, remoteProc.getProcId(), procId, serverName, code, seqId, this);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> return;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> remoteProc.reportTransition(env, regionNode, serverName, code, seqId);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> // Should be called with RegionStateNode locked<a name="line.398"></a>
+<span class="sourceLineNo">399</span> public void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.399"></a>
+<span class="sourceLineNo">400</span> ServerName serverName) throws IOException {<a name="line.400"></a>
+<span class="sourceLineNo">401</span> if (remoteProc != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> // this means we are waiting for the sub procedure, so wake it up<a name="line.402"></a>
+<span class="sourceLineNo">403</span> remoteProc.serverCrashed(env, regionNode, serverName);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> } else {<a name="line.404"></a>
+<span class="sourceLineNo">405</span> // we are in RUNNING state, just update the region state, and we will process it later.<a name="line.405"></a>
+<span class="sourceLineNo">406</span> env.getAssignmentManager().regionClosed(regionNode, false);<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
<span class="sourceLineNo">408</span> }<a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span> void unattachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> assert this.remoteProc == proc;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> this.remoteProc = null;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
-<span class="sourceLineNo">416</span> protected void rollbackState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.416"></a>
-<span class="sourceLineNo">417</span> throws IOException, InterruptedException {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> // no rollback<a name="line.418"></a>
-<span class="sourceLineNo">419</span> throw new UnsupportedOperationException();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span> protected RegionStateTransitionState getState(int stateId) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span> return RegionStateTransitionState.forNumber(stateId);<a name="line.424"></a>
-<span class="sourceLineNo">425</span> }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span> protected int getStateId(RegionStateTransitionState state) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span> return state.getNumber();<a name="line.429"></a>
-<span class="sourceLineNo">430</span> }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> @Override<a name="line.432"></a>
-<span class="sourceLineNo">433</span> protected RegionStateTransitionState getInitialState() {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return initialState;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> private static TransitionType convert(RegionTransitionType type) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> switch (type) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span> case ASSIGN:<a name="line.439"></a>
-<span class="sourceLineNo">440</span> return TransitionType.ASSIGN;<a name="line.440"></a>
-<span class="sourceLineNo">441</span> case UNASSIGN:<a name="line.441"></a>
-<span class="sourceLineNo">442</span> return TransitionType.UNASSIGN;<a name="line.442"></a>
-<span class="sourceLineNo">443</span> case MOVE:<a name="line.443"></a>
-<span class="sourceLineNo">444</span> return TransitionType.MOVE;<a name="line.444"></a>
-<span class="sourceLineNo">445</span> case REOPEN:<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return TransitionType.REOPEN;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> default:<a name="line.447"></a>
-<span class="sourceLineNo">448</span> throw new IllegalArgumentException("Unknown RegionTransitionType: " + type);<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span> }<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> private static RegionTransitionType convert(TransitionType type) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> switch (type) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> case ASSIGN:<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return RegionTransitionType.ASSIGN;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> case UNASSIGN:<a name="line.456"></a>
-<span class="sourceLineNo">457</span> return RegionTransitionType.UNASSIGN;<a name="line.457"></a>
-<span class="sourceLineNo">458</span> case MOVE:<a name="line.458"></a>
-<span class="sourceLineNo">459</span> return RegionTransitionType.MOVE;<a name="line.459"></a>
-<span class="sourceLineNo">460</span> case REOPEN:<a name="line.460"></a>
-<span class="sourceLineNo">461</span> return RegionTransitionType.REOPEN;<a name="line.461"></a>
-<span class="sourceLineNo">462</span> default:<a name="line.462"></a>
-<span class="sourceLineNo">463</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> @Override<a name="line.467"></a>
-<span class="sourceLineNo">468</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> super.serializeStateData(serializer);<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RegionStateTransitionStateData.Builder builder = RegionStateTransitionStateData.newBuilder()<a name="line.470"></a>
-<span class="sourceLineNo">471</span> .setType(convert(type)).setForceNewPlan(forceNewPlan);<a name="line.471"></a>
-<span class="sourceLineNo">472</span> if (assignCandidate != null) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> builder.setAssignCandidate(ProtobufUtil.toServerName(assignCandidate));<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span> serializer.serialize(builder.build());<a name="line.475"></a>
-<span class="sourceLineNo">476</span> }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span> @Override<a name="line.478"></a>
-<span class="sourceLineNo">479</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span> super.deserializeStateData(serializer);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> RegionStateTransitionStateData data =<a name="line.481"></a>
-<span class="sourceLineNo">482</span> serializer.deserialize(RegionStateTransitionStateData.class);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> type = convert(data.getType());<a name="line.483"></a>
-<span class="sourceLineNo">484</span> setInitalAndLastState();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> forceNewPlan = data.getForceNewPlan();<a name="line.485"></a>
-<span class="sourceLineNo">486</span> if (data.hasAssignCandidate()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span> assignCandidate = ProtobufUtil.toServerName(data.getAssignCandidate());<a name="line.487"></a>
-<span class="sourceLineNo">488</span> }<a name="line.488"></a>
-<span class="sourceLineNo">489</span> }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span> @Override<a name="line.491"></a>
-<span class="sourceLineNo">492</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span> MetricsAssignmentManager metrics = env.getAssignmentManager().getAssignmentManagerMetrics();<a name="line.493"></a>
-<span class="sourceLineNo">494</span> switch (type) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span> case ASSIGN:<a name="line.495"></a>
-<span class="sourceLineNo">496</span> return metrics.getAssignProcMetrics();<a name="line.496"></a>
-<span class="sourceLineNo">497</span> case UNASSIGN:<a name="line.497"></a>
-<span class="sourceLineNo">498</span> return metrics.getUnassignProcMetrics();<a name="line.498"></a>
-<span class="sourceLineNo">499</span> case MOVE:<a name="line.499"></a>
-<span class="sourceLineNo">500</span> return metrics.getMoveProcMetrics();<a name="line.500"></a>
-<span class="sourceLineNo">501</span> case REOPEN:<a name="line.501"></a>
-<span class="sourceLineNo">502</span> return metrics.getReopenProcMetrics();<a name="line.502"></a>
-<span class="sourceLineNo">503</span> default:<a name="line.503"></a>
-<span class="sourceLineNo">504</span> throw new IllegalArgumentException("Unknown transition type: " + type);<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span> }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span> @Override<a name="line.508"></a>
-<span class="sourceLineNo">509</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span> super.toStringClassDetails(sb);<a name="line.510"></a>
-<span class="sourceLineNo">511</span> if (initialState == RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> sb.append(", ASSIGN");<a name="line.512"></a>
-<span class="sourceLineNo">513</span> } else if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> sb.append(", UNASSIGN");<a name="line.514"></a>
-<span class="sourceLineNo">515</span> } else {<a name="line.515"></a>
-<span class="sourceLineNo">516</span> sb.append(", REOPEN/MOVE");<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span> }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span> private static TransitRegionStateProcedure setOwner(MasterProcedureEnv env,<a name="line.520"></a>
-<span class="sourceLineNo">521</span> TransitRegionStateProcedure proc) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> proc.setOwner(env.getRequestUser().getShortName());<a name="line.522"></a>
-<span class="sourceLineNo">523</span> return proc;<a name="line.523"></a>
-<span class="sourceLineNo">524</span> }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span> public enum TransitionType {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> ASSIGN, UNASSIGN, MOVE, REOPEN<a name="line.527"></a>
+<span class="sourceLineNo">410</span> void attachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> this.remoteProc = proc;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> void unattachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span> assert this.remoteProc == proc;<a name="line.415"></a>
+<span class="sourceLineNo">416</span> this.remoteProc = null;<a name="line.416"></a>
+<span class="sourceLineNo">417</span> }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span> @Override<a name="line.419"></a>
+<span class="sourceLineNo">420</span> protected void rollbackState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.420"></a>
+<span class="sourceLineNo">421</span> throws IOException, InterruptedException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span> // no rollback<a name="line.422"></a>
+<span class="sourceLineNo">423</span> throw new UnsupportedOperationException();<a name="line.423"></a>
+<span class="sourceLineNo">424</span> }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> @Override<a name="line.426"></a>
+<span class="sourceLineNo">427</span> protected RegionStateTransitionState getState(int stateId) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span> return RegionStateTransitionState.forNumber(stateId);<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> @Override<a name="line.431"></a>
+<span class="sourceLineNo">432</span> protected int getStateId(RegionStateTransitionState state) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return state.getNumber();<a name="line.433"></a>
+<span class="sourceLineNo">434</span> }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span> protected RegionStateTransitionState getInitialState() {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> return initialState;<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span> private static TransitionType convert(RegionTransitionType type) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span> switch (type) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span> case ASSIGN:<a name="line.443"></a>
+<span class="sourceLineNo">444</span> return TransitionType.ASSIGN;<a name="line.444"></a>
+<span class="sourceLineNo">445</span> case UNASSIGN:<a name="line.445"></a>
+<span class="sourceLineNo">446</span> return TransitionType.UNASSIGN;<a name="line.446"></a>
+<span class="sourceLineNo">447</span> case MOVE:<a name="line.447"></a>
+<span class="sourceLineNo">448</span> return TransitionType.MOVE;<a name="line.448"></a>
+<span class="sourceLineNo">449</span> case REOPEN:<a name="line.449"></a>
+<span class="sourceLineNo">450</span> return TransitionType.REOPEN;<a name="line.450"></a>
+<span class="sourceLineNo">451</span> default:<a name="line.451"></a>
+<span class="sourceLineNo">452</span> throw new IllegalArgumentException("Unknown RegionTransitionType: " + type);<a name="line.452"></a>
+<span class="sourceLineNo">453</span> }<a name="line.453"></a>
+<span class="sourceLineNo">454</span> }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span> private static RegionTransitionType convert(TransitionType type) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span> switch (type) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span> case ASSIGN:<a name="line.458"></a>
+<span class="sourceLineNo">459</span> return RegionTransitionType.ASSIGN;<a name="line.459"></a>
+<span class="sourceLineNo">460</span> case UNASSIGN:<a name="line.460"></a>
+<span class="sourceLineNo">461</span> return RegionTransitionType.UNASSIGN;<a name="line.461"></a>
+<span class="sourceLineNo">462</span> case MOVE:<a name="line.462"></a>
+<span class="sourceLineNo">463</span> return RegionTransitionType.MOVE;<a name="line.463"></a>
+<span class="sourceLineNo">464</span> case REOPEN:<a name="line.464"></a>
+<span class="sourceLineNo">465</span> return RegionTransitionType.REOPEN;<a name="line.465"></a>
+<span class="sourceLineNo">466</span> default:<a name="line.466"></a>
+<span class="sourceLineNo">467</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.467"></a>
+<span class="sourceLineNo">468</span> }<a name="line.468"></a>
+<span class="sourceLineNo">469</span> }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span> @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.472"></a>
+<span class="sourceLineNo">473</span> super.serializeStateData(serializer);<a name="line.473"></a>
+<span class="sourceLineNo">474</span> RegionStateTransitionStateData.Builder builder = RegionStateTransitionStateData.newBuilder()<a name="line.474"></a>
+<span class="sourceLineNo">475</span> .setType(convert(type)).setForceNewPlan(forceNewPlan);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> if (assignCandidate != null) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span> builder.setAssignCandidate(ProtobufUtil.toServerName(assignCandidate));<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span> serializer.serialize(builder.build());<a name="line.479"></a>
+<span class="sourceLineNo">480</span> }<a name="line.480"></a>
+<span class="sourceLineNo">481</span><a name="line.481"></a>
+<span class="sourceLineNo">482</span> @Override<a name="line.482"></a>
+<span class="sourceLineNo">483</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.483"></a>
+<span class="sourceLineNo">484</span> super.deserializeStateData(serializer);<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateTransitionStateData data =<a name="line.485"></a>
+<span class="sourceLineNo">486</span> serializer.deserialize(RegionStateTransitionStateData.class);<a name="line.486"></a>
+<span class="sourceLineNo">487</span> type = convert(data.getType());<a name="line.487"></a>
+<span class="sourceLineNo">488</span> setInitalAndLastState();<a name="line.488"></a>
+<span class="sourceLineNo">489</span> forceNewPlan = data.getForceNewPlan();<a name="line.489"></a>
+<span class="sourceLineNo">490</span> if (data.hasAssignCandidate()) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span> assignCandidate = ProtobufUtil.toServerName(data.getAssignCandidate());<a name="line.491"></a>
+<span class="sourceLineNo">492</span> }<a name="line.492"></a>
+<span class="sourceLineNo">493</span> }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span> @Override<a name="line.495"></a>
+<span class="sourceLineNo">496</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.496"></a>
+<span class="sourceLineNo">497</span> MetricsAssignmentManager metrics = env.getAssignmentManager().getAssignmentManagerMetrics();<a name="line.497"></a>
+<span class="sourceLineNo">498</span> switch (type) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span> case ASSIGN:<a name="line.499"></a>
+<span class="sourceLineNo">500</span> return metrics.getAssignProcMetrics();<a name="line.500"></a>
+<span class="sourceLineNo">501</span> case UNASSIGN:<a name="line.501"></a>
+<span class="sourceLineNo">502</span> return metrics.getUnassignProcMetrics();<a name="line.502"></a>
+<span class="sourceLineNo">503</span> case MOVE:<a name="line.503"></a>
+<span class="sourceLineNo">504</span> return metrics.getMoveProcMetrics();<a name="line.504"></a>
+<span class="sourceLineNo">505</span> case REOPEN:<a name="line.505"></a>
+<span class="sourceLineNo">506</span> return metrics.getReopenProcMetrics();<a name="line.506"></a>
+<span class="sourceLineNo">507</span> default:<a name="line.507"></a>
+<span class="sourceLineNo">508</span> throw new IllegalArgumentException("Unknown transition type: " + type);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span> super.toStringClassDetails(sb);<a name="line.514"></a>
+<span class="sourceLineNo">515</span> if (initialState == RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> sb.append(", ASSIGN");<a name="line.516"></a>
+<span class="sourceLineNo">517</span> } else if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> sb.append(", UNASSIGN");<a name="line.518"></a>
+<span class="sourceLineNo">519</span> } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> sb.append(", REOPEN/MOVE");<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> private static TransitRegionStateProcedure setOwner(MasterProcedureEnv env,<a name="line.524"></a>
+<span class="sourceLineNo">525</span> TransitRegionStateProcedure proc) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span> proc.setOwner(env.getRequestUser().getShortName());<a name="line.526"></a>
+<span class="sourceLineNo">527</span> return proc;<a name="line.527"></a>
<span class="sourceLineNo">528</span> }<a name="line.528"></a>
<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> // Be careful that, when you call these 4 methods below, you need to manually attach the returned<a name="line.530"></a>
-<span class="sourceLineNo">531</span> // procedure with the RegionStateNode, otherwise the procedure will quit immediately without doing<a name="line.531"></a>
-<span class="sourceLineNo">532</span> // anything. See the comment in executeFromState to find out why we need this assumption.<a name="line.532"></a>
-<span class="sourceLineNo">533</span> public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,<a name="line.533"></a>
-<span class="sourceLineNo">534</span> @Nullable ServerName targetServer) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> return setOwner(env,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> new TransitRegionStateProcedure(env, region, targetServer, false, TransitionType.ASSIGN));<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span> public static TransitRegionStateProcedure unassign(MasterProcedureEnv env, RegionInfo region) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span> return setOwner(env,<a name="line.540"></a>
-<span class="sourceLineNo">541</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.UNASSIGN));<a name="line.541"></a>
-<span class="sourceLineNo">542</span> }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span> public static TransitRegionStateProcedure reopen(MasterProcedureEnv env, RegionInfo region) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> return setOwner(env,<a name="line.545"></a>
-<span class="sourceLineNo">546</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.REOPEN));<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span> public static TransitRegionStateProcedure move(MasterProcedureEnv env, RegionInfo region,<a name="line.549"></a>
-<span class="sourceLineNo">550</span> @Nullable ServerName targetServer) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> return setOwner(env, new TransitRegionStateProcedure(env, region, targetServer,<a name="line.551"></a>
-<span class="sourceLineNo">552</span> targetServer == null, TransitionType.MOVE));<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>}<a name="line.554"></a>
+<span class="sourceLineNo">530</span> public enum TransitionType {<a name="line.530"></a>
+<span class="sourceLineNo">531</span> ASSIGN, UNASSIGN, MOVE, REOPEN<a name="line.531"></a>
+<span class="sourceLineNo">532</span> }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span> // Be careful that, when you call these 4 methods below, you need to manually attach the returned<a name="line.534"></a>
+<span class="sourceLineNo">535</span> // procedure with the RegionStateNode, otherwise the procedure will quit immediately without doing<a name="line.535"></a>
+<span class="sourceLineNo">536</span> // anything. See the comment in executeFromState to find out why we need this assumption.<a name="line.536"></a>
+<span class="sourceLineNo">537</span> public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,<a name="line.537"></a>
+<span class="sourceLineNo">538</span> @Nullable ServerName targetServer) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span> return setOwner(env,<a name="line.539"></a>
+<span class="sourceLineNo">540</span> new TransitRegionStateProcedure(env, region, targetServer, false, TransitionType.ASSIGN));<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span> public static TransitRegionStateProcedure unassign(MasterProcedureEnv env, RegionInfo region) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span> return setOwner(env,<a name="line.544"></a>
+<span class="sourceLineNo">545</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.UNASSIGN));<a name="line.545"></a>
+<span class="sourceLineNo">546</span> }<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span> public static TransitRegionStateProcedure reopen(MasterProcedureEnv env, RegionInfo region) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> return setOwner(env,<a name="line.549"></a>
+<span class="sourceLineNo">550</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.REOPEN));<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public static TransitRegionStateProcedure move(MasterProcedureEnv env, RegionInfo region,<a name="line.553"></a>
+<span class="sourceLineNo">554</span> @Nullable ServerName targetServer) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span> return setOwner(env, new TransitRegionStateProcedure(env, region, targetServer,<a name="line.555"></a>
+<span class="sourceLineNo">556</span> targetServer == null, TransitionType.MOVE));<a name="line.556"></a>
+<span class="sourceLineNo">557</span> }<a name="line.557"></a>
+<span class="sourceLineNo">558</span>}<a name="line.558"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
index 05e9fa7..6c6c639 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html
@@ -44,522 +44,526 @@
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.slf4j.Logger;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.slf4j.LoggerFactory;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionStateData;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>/**<a name="line.52"></a>
-<span class="sourceLineNo">053</span> * The procedure to deal with the state transition of a region. A region with a TRSP in place is<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * called RIT, i.e, RegionInTransition.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * <p/><a name="line.55"></a>
-<span class="sourceLineNo">056</span> * It can be used to assign/unassign/reopen/move a region, and for<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * {@link #unassign(MasterProcedureEnv, RegionInfo)} and<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * {@link #reopen(MasterProcedureEnv, RegionInfo)}, you do not need to specify a target server, and<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * for {@link #assign(MasterProcedureEnv, RegionInfo, ServerName)} and<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you want to you can provide a<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * target server. And for {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you do not<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * specify a targetServer, we will select one randomly.<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * <p/><a name="line.63"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.slf4j.Logger;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.slf4j.LoggerFactory;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionState;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionStateTransitionStateData;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.RegionTransitionType;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
+<span class="sourceLineNo">054</span> * The procedure to deal with the state transition of a region. A region with a TRSP in place is<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * called RIT, i.e, RegionInTransition.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> * <p/><a name="line.56"></a>
+<span class="sourceLineNo">057</span> * It can be used to assign/unassign/reopen/move a region, and for<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * {@link #unassign(MasterProcedureEnv, RegionInfo)} and<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * {@link #reopen(MasterProcedureEnv, RegionInfo)}, you do not need to specify a target server, and<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * for {@link #assign(MasterProcedureEnv, RegionInfo, ServerName)} and<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you want to you can provide a<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * target server. And for {@link #move(MasterProcedureEnv, RegionInfo, ServerName)}, if you do not<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * specify a targetServer, we will select one randomly.<a name="line.63"></a>
<span class="sourceLineNo">064</span> * <p/><a name="line.64"></a>
-<span class="sourceLineNo">065</span> * The typical state transition for assigning a region is:<a name="line.65"></a>
-<span class="sourceLineNo">066</span> *<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * <pre><a name="line.67"></a>
-<span class="sourceLineNo">068</span> * GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * </pre><a name="line.69"></a>
-<span class="sourceLineNo">070</span> *<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * Notice that, if there are failures we may go back to the {@code GET_ASSIGN_CANDIDATE} state to<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * try again.<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * <p/><a name="line.73"></a>
-<span class="sourceLineNo">074</span> * The typical state transition for unassigning a region is:<a name="line.74"></a>
-<span class="sourceLineNo">075</span> *<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * <pre><a name="line.76"></a>
-<span class="sourceLineNo">077</span> * CLOSE -----> CONFIRM_CLOSED<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * </pre><a name="line.78"></a>
-<span class="sourceLineNo">079</span> *<a name="line.79"></a>
-<span class="sourceLineNo">080</span> * Here things go a bit different, if there are failures, especially that if there is a server<a name="line.80"></a>
-<span class="sourceLineNo">081</span> * crash, we will go to the {@code GET_ASSIGN_CANDIDATE} state to bring the region online first, and<a name="line.81"></a>
-<span class="sourceLineNo">082</span> * then go through the normal way to unassign it.<a name="line.82"></a>
-<span class="sourceLineNo">083</span> * <p/><a name="line.83"></a>
-<span class="sourceLineNo">084</span> * The typical state transition for reopening/moving a region is:<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *<a name="line.85"></a>
-<span class="sourceLineNo">086</span> * <pre><a name="line.86"></a>
-<span class="sourceLineNo">087</span> * CLOSE -----> CONFIRM_CLOSED -----> GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * </pre><a name="line.88"></a>
-<span class="sourceLineNo">089</span> *<a name="line.89"></a>
-<span class="sourceLineNo">090</span> * The retry logic is the same with the above assign/unassign.<a name="line.90"></a>
-<span class="sourceLineNo">091</span> * <p/><a name="line.91"></a>
-<span class="sourceLineNo">092</span> * Notice that, although we allow specify a target server, it just acts as a candidate, we do not<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * guarantee that the region will finally be on the target server. If this is important for you, you<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * should check whether the region is on the target server after the procedure is finished.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * <p/><a name="line.95"></a>
-<span class="sourceLineNo">096</span> * When you want to schedule a TRSP, please check whether there is still one for this region, and<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * the check should be under the RegionStateNode lock. We will remove the TRSP from a<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * RegionStateNode when we are done, see the code in {@code reportTransition} method below. There<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * could be at most one TRSP for a give region.<a name="line.99"></a>
-<span class="sourceLineNo">100</span> */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>@InterfaceAudience.Private<a name="line.101"></a>
-<span class="sourceLineNo">102</span>public class TransitRegionStateProcedure<a name="line.102"></a>
-<span class="sourceLineNo">103</span> extends AbstractStateMachineRegionProcedure<RegionStateTransitionState> {<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span> private static final Logger LOG = LoggerFactory.getLogger(TransitRegionStateProcedure.class);<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> private TransitionType type;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span> private RegionStateTransitionState initialState;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> private RegionStateTransitionState lastState;<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span> // the candidate where we want to assign the region to.<a name="line.113"></a>
-<span class="sourceLineNo">114</span> private ServerName assignCandidate;<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> private boolean forceNewPlan;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span> private int attempt;<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span> private RegionRemoteProcedureBase remoteProc;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span> public TransitRegionStateProcedure() {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> }<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span> private void setInitalAndLastState() {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> switch (type) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span> case ASSIGN:<a name="line.127"></a>
-<span class="sourceLineNo">128</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE;<a name="line.128"></a>
-<span class="sourceLineNo">129</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.129"></a>
-<span class="sourceLineNo">130</span> break;<a name="line.130"></a>
-<span class="sourceLineNo">131</span> case UNASSIGN:<a name="line.131"></a>
-<span class="sourceLineNo">132</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.132"></a>
-<span class="sourceLineNo">133</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED;<a name="line.133"></a>
-<span class="sourceLineNo">134</span> break;<a name="line.134"></a>
-<span class="sourceLineNo">135</span> case MOVE:<a name="line.135"></a>
-<span class="sourceLineNo">136</span> case REOPEN:<a name="line.136"></a>
-<span class="sourceLineNo">137</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.137"></a>
-<span class="sourceLineNo">138</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.138"></a>
-<span class="sourceLineNo">139</span> break;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> default:<a name="line.140"></a>
-<span class="sourceLineNo">141</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.141"></a>
-<span class="sourceLineNo">142</span> }<a name="line.142"></a>
-<span class="sourceLineNo">143</span> }<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span> @VisibleForTesting<a name="line.145"></a>
-<span class="sourceLineNo">146</span> protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,<a name="line.146"></a>
-<span class="sourceLineNo">147</span> ServerName assignCandidate, boolean forceNewPlan, TransitionType type) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span> super(env, hri);<a name="line.148"></a>
-<span class="sourceLineNo">149</span> this.assignCandidate = assignCandidate;<a name="line.149"></a>
-<span class="sourceLineNo">150</span> this.forceNewPlan = forceNewPlan;<a name="line.150"></a>
-<span class="sourceLineNo">151</span> this.type = type;<a name="line.151"></a>
-<span class="sourceLineNo">152</span> setInitalAndLastState();<a name="line.152"></a>
-<span class="sourceLineNo">153</span> }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span> public TableOperationType getTableOperationType() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span> // TODO: maybe we should make another type here, REGION_TRANSITION?<a name="line.157"></a>
-<span class="sourceLineNo">158</span> return TableOperationType.REGION_EDIT;<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span> @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span> if (TableName.isMetaTableName(getTableName())) {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> return false;<a name="line.164"></a>
-<span class="sourceLineNo">165</span> }<a name="line.165"></a>
-<span class="sourceLineNo">166</span> // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.166"></a>
-<span class="sourceLineNo">167</span> // fail when updating meta so we wait until it is assigned.<a name="line.167"></a>
-<span class="sourceLineNo">168</span> AssignmentManager am = env.getAssignmentManager();<a name="line.168"></a>
-<span class="sourceLineNo">169</span> return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());<a name="line.169"></a>
-<span class="sourceLineNo">170</span> }<a name="line.170"></a>
-<span class="sourceLineNo">171</span><a name="line.171"></a>
-<span class="sourceLineNo">172</span> private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.172"></a>
-<span class="sourceLineNo">173</span> throws ProcedureSuspendedException {<a name="line.173"></a>
-<span class="sourceLineNo">174</span> // Here the assumption is that, the region must be in CLOSED state, so the region location<a name="line.174"></a>
-<span class="sourceLineNo">175</span> // will be null. And if we fail to open the region and retry here, the forceNewPlan will be<a name="line.175"></a>
-<span class="sourceLineNo">176</span> // true, and also we will set the region location to null.<a name="line.176"></a>
-<span class="sourceLineNo">177</span> boolean retain = false;<a name="line.177"></a>
-<span class="sourceLineNo">178</span> if (!forceNewPlan) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (assignCandidate != null) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> retain = assignCandidate.equals(regionNode.getLastHost());<a name="line.180"></a>
-<span class="sourceLineNo">181</span> regionNode.setRegionLocation(assignCandidate);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> } else if (regionNode.getLastHost() != null) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> retain = true;<a name="line.183"></a>
-<span class="sourceLineNo">184</span> LOG.info("Setting lastHost as the region location {}", regionNode.getLastHost());<a name="line.184"></a>
-<span class="sourceLineNo">185</span> regionNode.setRegionLocation(regionNode.getLastHost());<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span> }<a name="line.187"></a>
-<span class="sourceLineNo">188</span> LOG.info("Starting {}; {}; forceNewPlan={}, retain={}", this, regionNode.toShortString(),<a name="line.188"></a>
-<span class="sourceLineNo">189</span> forceNewPlan, retain);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> env.getAssignmentManager().queueAssign(regionNode);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_OPEN);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.192"></a>
-<span class="sourceLineNo">193</span> throw new ProcedureSuspendedException();<a name="line.193"></a>
-<span class="sourceLineNo">194</span> }<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> private void openRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> ServerName loc = regionNode.getRegionLocation();<a name="line.198"></a>
-<span class="sourceLineNo">199</span> if (loc == null) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> LOG.warn("No location specified for {}, jump back to state {} to get one", getRegion(),<a name="line.200"></a>
-<span class="sourceLineNo">201</span> RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.201"></a>
-<span class="sourceLineNo">202</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.202"></a>
-<span class="sourceLineNo">203</span> return;<a name="line.203"></a>
-<span class="sourceLineNo">204</span> }<a name="line.204"></a>
-<span class="sourceLineNo">205</span> env.getAssignmentManager().regionOpening(regionNode);<a name="line.205"></a>
-<span class="sourceLineNo">206</span> addChildProcedure(new OpenRegionProcedure(this, getRegion(), loc));<a name="line.206"></a>
-<span class="sourceLineNo">207</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED);<a name="line.207"></a>
-<span class="sourceLineNo">208</span> }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span> private Flow confirmOpened(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.210"></a>
-<span class="sourceLineNo">211</span> throws IOException {<a name="line.211"></a>
-<span class="sourceLineNo">212</span> if (regionNode.isInState(State.OPEN)) {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> attempt = 0;<a name="line.213"></a>
-<span class="sourceLineNo">214</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span> // we are the last state, finish<a name="line.215"></a>
-<span class="sourceLineNo">216</span> regionNode.unsetProcedure(this);<a name="line.216"></a>
-<span class="sourceLineNo">217</span> ServerCrashProcedure.updateProgress(env, getParentProcId());<a name="line.217"></a>
-<span class="sourceLineNo">218</span> return Flow.NO_MORE_STATE;<a name="line.218"></a>
-<span class="sourceLineNo">219</span> }<a name="line.219"></a>
-<span class="sourceLineNo">220</span> // It is possible that we arrive here but confirm opened is not the last state, for example,<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // when merging or splitting a region, we unassign the region from a RS and the RS is crashed,<a name="line.221"></a>
-<span class="sourceLineNo">222</span> // then there will be recovered edits for this region, we'd better make the region online<a name="line.222"></a>
-<span class="sourceLineNo">223</span> // again and then unassign it, otherwise we have to fail the merge/split procedure as we may<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // loss data.<a name="line.224"></a>
-<span class="sourceLineNo">225</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.225"></a>
-<span class="sourceLineNo">226</span> return Flow.HAS_MORE_STATE;<a name="line.226"></a>
-<span class="sourceLineNo">227</span> }<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span> int retries = env.getAssignmentManager().getRegionStates().addToFailedOpen(regionNode)<a name="line.229"></a>
-<span class="sourceLineNo">230</span> .incrementAndGetRetries();<a name="line.230"></a>
-<span class="sourceLineNo">231</span> int maxAttempts = env.getAssignmentManager().getAssignMaxAttempts();<a name="line.231"></a>
-<span class="sourceLineNo">232</span> LOG.info("Retry={} of max={}; {}; {}", retries, maxAttempts, this, regionNode.toShortString());<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span> if (retries >= maxAttempts) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> env.getAssignmentManager().regionFailedOpen(regionNode, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> setFailure(getClass().getSimpleName(), new RetriesExhaustedException(<a name="line.236"></a>
-<span class="sourceLineNo">237</span> "Max attempts " + env.getAssignmentManager().getAssignMaxAttempts() + " exceeded"));<a name="line.237"></a>
-<span class="sourceLineNo">238</span> regionNode.unsetProcedure(this);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return Flow.NO_MORE_STATE;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span> env.getAssignmentManager().regionFailedOpen(regionNode, false);<a name="line.242"></a>
-<span class="sourceLineNo">243</span> // we failed to assign the region, force a new plan<a name="line.243"></a>
-<span class="sourceLineNo">244</span> forceNewPlan = true;<a name="line.244"></a>
-<span class="sourceLineNo">245</span> regionNode.setRegionLocation(null);<a name="line.245"></a>
-<span class="sourceLineNo">246</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> if (retries > env.getAssignmentManager().getAssignRetryImmediatelyMaxAttempts()) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> // Throw exception to backoff and retry when failed open too many times<a name="line.249"></a>
-<span class="sourceLineNo">250</span> throw new HBaseIOException("Failed to open region");<a name="line.250"></a>
-<span class="sourceLineNo">251</span> } else {<a name="line.251"></a>
-<span class="sourceLineNo">252</span> // Here we do not throw exception because we want to the region to be online ASAP<a name="line.252"></a>
-<span class="sourceLineNo">253</span> return Flow.HAS_MORE_STATE;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> }<a name="line.254"></a>
-<span class="sourceLineNo">255</span> }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span> private void closeRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.257"></a>
-<span class="sourceLineNo">258</span> if (regionNode.isInState(State.OPEN, State.CLOSING, State.MERGING, State.SPLITTING)) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span> // this is the normal case<a name="line.259"></a>
-<span class="sourceLineNo">260</span> env.getAssignmentManager().regionClosing(regionNode);<a name="line.260"></a>
-<span class="sourceLineNo">261</span> addChildProcedure(new CloseRegionProcedure(this, getRegion(), regionNode.getRegionLocation(),<a name="line.261"></a>
-<span class="sourceLineNo">262</span> assignCandidate));<a name="line.262"></a>
-<span class="sourceLineNo">263</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED);<a name="line.263"></a>
-<span class="sourceLineNo">264</span> } else {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> forceNewPlan = true;<a name="line.265"></a>
-<span class="sourceLineNo">266</span> regionNode.setRegionLocation(null);<a name="line.266"></a>
-<span class="sourceLineNo">267</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> }<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span> private Flow confirmClosed(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.271"></a>
-<span class="sourceLineNo">272</span> throws IOException {<a name="line.272"></a>
-<span class="sourceLineNo">273</span> if (regionNode.isInState(State.CLOSED)) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span> attempt = 0;<a name="line.274"></a>
-<span class="sourceLineNo">275</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span> // we are the last state, finish<a name="line.276"></a>
-<span class="sourceLineNo">277</span> regionNode.unsetProcedure(this);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> return Flow.NO_MORE_STATE;<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> // This means we need to open the region again, should be a move or reopen<a name="line.280"></a>
-<span class="sourceLineNo">281</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.281"></a>
-<span class="sourceLineNo">282</span> return Flow.HAS_MORE_STATE;<a name="line.282"></a>
-<span class="sourceLineNo">283</span> }<a name="line.283"></a>
-<span class="sourceLineNo">284</span> if (regionNode.isInState(State.CLOSING)) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span> // This is possible, think the target RS crashes and restarts immediately, the close region<a name="line.285"></a>
-<span class="sourceLineNo">286</span> // operation will return a NotServingRegionException soon, we can only recover after SCP takes<a name="line.286"></a>
-<span class="sourceLineNo">287</span> // care of this RS. So here we throw an IOException to let upper layer to retry with backoff.<a name="line.287"></a>
-<span class="sourceLineNo">288</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.288"></a>
-<span class="sourceLineNo">289</span> throw new HBaseIOException("Failed to close region");<a name="line.289"></a>
-<span class="sourceLineNo">290</span> }<a name="line.290"></a>
-<span class="sourceLineNo">291</span> // abnormally closed, need to reopen it, no matter what is the last state, see the comment in<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // confirmOpened for more details that why we need to reopen the region first even if we just<a name="line.292"></a>
-<span class="sourceLineNo">293</span> // want to close it.<a name="line.293"></a>
-<span class="sourceLineNo">294</span> // The only exception is for non-default replica, where we do not need to deal with recovered<a name="line.294"></a>
-<span class="sourceLineNo">295</span> // edits. Notice that the region will remain in ABNORMALLY_CLOSED state, the upper layer need to<a name="line.295"></a>
-<span class="sourceLineNo">296</span> // deal with this state. For non-default replica, this is usually the same with CLOSED.<a name="line.296"></a>
-<span class="sourceLineNo">297</span> assert regionNode.isInState(State.ABNORMALLY_CLOSED);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> if (!RegionReplicaUtil.isDefaultReplica(getRegion()) &&<a name="line.298"></a>
-<span class="sourceLineNo">299</span> lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span> regionNode.unsetProcedure(this);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> return Flow.NO_MORE_STATE;<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> attempt = 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.304"></a>
-<span class="sourceLineNo">305</span> return Flow.HAS_MORE_STATE;<a name="line.305"></a>
-<span class="sourceLineNo">306</span> }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span> // Override to lock RegionStateNode<a name="line.308"></a>
-<span class="sourceLineNo">309</span> @SuppressWarnings("rawtypes")<a name="line.309"></a>
-<span class="sourceLineNo">310</span> @Override<a name="line.310"></a>
-<span class="sourceLineNo">311</span> protected Procedure[] execute(MasterProcedureEnv env)<a name="line.311"></a>
-<span class="sourceLineNo">312</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> RegionStateNode regionNode =<a name="line.313"></a>
-<span class="sourceLineNo">314</span> env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.314"></a>
-<span class="sourceLineNo">315</span> regionNode.lock();<a name="line.315"></a>
-<span class="sourceLineNo">316</span> try {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> return super.execute(env);<a name="line.317"></a>
-<span class="sourceLineNo">318</span> } finally {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> regionNode.unlock();<a name="line.319"></a>
-<span class="sourceLineNo">320</span> }<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span> private RegionStateNode getRegionStateNode(MasterProcedureEnv env) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span> @Override<a name="line.327"></a>
-<span class="sourceLineNo">328</span> protected Flow executeFromState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.328"></a>
-<span class="sourceLineNo">329</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> RegionStateNode regionNode = getRegionStateNode(env);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> try {<a name="line.331"></a>
-<span class="sourceLineNo">332</span> switch (state) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span> case REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE:<a name="line.333"></a>
-<span class="sourceLineNo">334</span> queueAssign(env, regionNode);<a name="line.334"></a>
-<span class="sourceLineNo">335</span> return Flow.HAS_MORE_STATE;<a name="line.335"></a>
-<span class="sourceLineNo">336</span> case REGION_STATE_TRANSITION_OPEN:<a name="line.336"></a>
-<span class="sourceLineNo">337</span> openRegion(env, regionNode);<a name="line.337"></a>
-<span class="sourceLineNo">338</span> return Flow.HAS_MORE_STATE;<a name="line.338"></a>
-<span class="sourceLineNo">339</span> case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.339"></a>
-<span class="sourceLineNo">340</span> return confirmOpened(env, regionNode);<a name="line.340"></a>
-<span class="sourceLineNo">341</span> case REGION_STATE_TRANSITION_CLOSE:<a name="line.341"></a>
-<span class="sourceLineNo">342</span> closeRegion(env, regionNode);<a name="line.342"></a>
-<span class="sourceLineNo">343</span> return Flow.HAS_MORE_STATE;<a name="line.343"></a>
-<span class="sourceLineNo">344</span> case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.344"></a>
-<span class="sourceLineNo">345</span> return confirmClosed(env, regionNode);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> default:<a name="line.346"></a>
-<span class="sourceLineNo">347</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> } catch (IOException e) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span> long backoff = ProcedureUtil.getBackoffTimeMs(this.attempt++);<a name="line.350"></a>
-<span class="sourceLineNo">351</span> LOG.warn(<a name="line.351"></a>
-<span class="sourceLineNo">352</span> "Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.352"></a>
-<span class="sourceLineNo">353</span> "by other Procedure or operator intervention",<a name="line.353"></a>
-<span class="sourceLineNo">354</span> backoff / 1000, this, regionNode.toShortString(), e);<a name="line.354"></a>
-<span class="sourceLineNo">355</span> setTimeout(Math.toIntExact(backoff));<a name="line.355"></a>
-<span class="sourceLineNo">356</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.356"></a>
-<span class="sourceLineNo">357</span> skipPersistence();<a name="line.357"></a>
-<span class="sourceLineNo">358</span> throw new ProcedureSuspendedException();<a name="line.358"></a>
-<span class="sourceLineNo">359</span> }<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span><a name="line.361"></a>
-<span class="sourceLineNo">362</span> /**<a name="line.362"></a>
-<span class="sourceLineNo">363</span> * At end of timeout, wake ourselves up so we run again.<a name="line.363"></a>
-<span class="sourceLineNo">364</span> */<a name="line.364"></a>
-<span class="sourceLineNo">365</span> @Override<a name="line.365"></a>
-<span class="sourceLineNo">366</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.367"></a>
-<span class="sourceLineNo">368</span> env.getProcedureScheduler().addFront(this);<a name="line.368"></a>
-<span class="sourceLineNo">369</span> return false; // 'false' means that this procedure handled the timeout<a name="line.369"></a>
-<span class="sourceLineNo">370</span> }<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span> // Should be called with RegionStateNode locked<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.373"></a>
-<span class="sourceLineNo">374</span> ServerName serverName, TransitionCode code, long seqId, long procId) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span> if (remoteProc == null) {<a name="line.375"></a>
-<span class="sourceLineNo">376</span> LOG.warn(<a name="line.376"></a>
-<span class="sourceLineNo">377</span> "There is no outstanding remote region procedure for {}, serverName={}, code={}," +<a name="line.377"></a>
-<span class="sourceLineNo">378</span> " seqId={}, proc={}, should be a retry, ignore",<a name="line.378"></a>
-<span class="sourceLineNo">379</span> regionNode, serverName, code, seqId, this);<a name="line.379"></a>
-<span class="sourceLineNo">380</span> return;<a name="line.380"></a>
-<span class="sourceLineNo">381</span> }<a name="line.381"></a>
-<span class="sourceLineNo">382</span> // The procId could be -1 if it is from an old region server, we need to deal with it so that we<a name="line.382"></a>
-<span class="sourceLineNo">383</span> // can do rolling upgraing.<a name="line.383"></a>
-<span class="sourceLineNo">384</span> if (procId >= 0 && remoteProc.getProcId() != procId) {<a name="line.384"></a>
-<span class="sourceLineNo">385</span> LOG.warn(<a name="line.385"></a>
-<span class="sourceLineNo">386</span> "The pid of remote region procedure for {} is {}, the reported pid={}, serverName={}," +<a name="line.386"></a>
-<span class="sourceLineNo">387</span> " code={}, seqId={}, proc={}, should be a retry, ignore",<a name="line.387"></a>
-<span class="sourceLineNo">388</span> regionNode, remoteProc.getProcId(), procId, serverName, code, seqId, this);<a name="line.388"></a>
-<span class="sourceLineNo">389</span> return;<a name="line.389"></a>
-<span class="sourceLineNo">390</span> }<a name="line.390"></a>
-<span class="sourceLineNo">391</span> remoteProc.reportTransition(env, regionNode, serverName, code, seqId);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> }<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> // Should be called with RegionStateNode locked<a name="line.394"></a>
-<span class="sourceLineNo">395</span> public void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.395"></a>
-<span class="sourceLineNo">396</span> ServerName serverName) throws IOException {<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (remoteProc != null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span> // this means we are waiting for the sub procedure, so wake it up<a name="line.398"></a>
-<span class="sourceLineNo">399</span> remoteProc.serverCrashed(env, regionNode, serverName);<a name="line.399"></a>
-<span class="sourceLineNo">400</span> } else {<a name="line.400"></a>
-<span class="sourceLineNo">401</span> // we are in RUNNING state, just update the region state, and we will process it later.<a name="line.401"></a>
-<span class="sourceLineNo">402</span> env.getAssignmentManager().regionClosed(regionNode, false);<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span> }<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span> void attachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> this.remoteProc = proc;<a name="line.407"></a>
+<span class="sourceLineNo">065</span> * <p/><a name="line.65"></a>
+<span class="sourceLineNo">066</span> * The typical state transition for assigning a region is:<a name="line.66"></a>
+<span class="sourceLineNo">067</span> *<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * <pre><a name="line.68"></a>
+<span class="sourceLineNo">069</span> * GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.69"></a>
+<span class="sourceLineNo">070</span> * </pre><a name="line.70"></a>
+<span class="sourceLineNo">071</span> *<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * Notice that, if there are failures we may go back to the {@code GET_ASSIGN_CANDIDATE} state to<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * try again.<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * <p/><a name="line.74"></a>
+<span class="sourceLineNo">075</span> * The typical state transition for unassigning a region is:<a name="line.75"></a>
+<span class="sourceLineNo">076</span> *<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * <pre><a name="line.77"></a>
+<span class="sourceLineNo">078</span> * CLOSE -----> CONFIRM_CLOSED<a name="line.78"></a>
+<span class="sourceLineNo">079</span> * </pre><a name="line.79"></a>
+<span class="sourceLineNo">080</span> *<a name="line.80"></a>
+<span class="sourceLineNo">081</span> * Here things go a bit different, if there are failures, especially that if there is a server<a name="line.81"></a>
+<span class="sourceLineNo">082</span> * crash, we will go to the {@code GET_ASSIGN_CANDIDATE} state to bring the region online first, and<a name="line.82"></a>
+<span class="sourceLineNo">083</span> * then go through the normal way to unassign it.<a name="line.83"></a>
+<span class="sourceLineNo">084</span> * <p/><a name="line.84"></a>
+<span class="sourceLineNo">085</span> * The typical state transition for reopening/moving a region is:<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * <pre><a name="line.87"></a>
+<span class="sourceLineNo">088</span> * CLOSE -----> CONFIRM_CLOSED -----> GET_ASSIGN_CANDIDATE ------> OPEN -----> CONFIRM_OPENED<a name="line.88"></a>
+<span class="sourceLineNo">089</span> * </pre><a name="line.89"></a>
+<span class="sourceLineNo">090</span> *<a name="line.90"></a>
+<span class="sourceLineNo">091</span> * The retry logic is the same with the above assign/unassign.<a name="line.91"></a>
+<span class="sourceLineNo">092</span> * <p/><a name="line.92"></a>
+<span class="sourceLineNo">093</span> * Notice that, although we allow specify a target server, it just acts as a candidate, we do not<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * guarantee that the region will finally be on the target server. If this is important for you, you<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * should check whether the region is on the target server after the procedure is finished.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * <p/><a name="line.96"></a>
+<span class="sourceLineNo">097</span> * When you want to schedule a TRSP, please check whether there is still one for this region, and<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * the check should be under the RegionStateNode lock. We will remove the TRSP from a<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * RegionStateNode when we are done, see the code in {@code reportTransition} method below. There<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * could be at most one TRSP for a give region.<a name="line.100"></a>
+<span class="sourceLineNo">101</span> */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>@InterfaceAudience.Private<a name="line.102"></a>
+<span class="sourceLineNo">103</span>public class TransitRegionStateProcedure<a name="line.103"></a>
+<span class="sourceLineNo">104</span> extends AbstractStateMachineRegionProcedure<RegionStateTransitionState> {<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span> private static final Logger LOG = LoggerFactory.getLogger(TransitRegionStateProcedure.class);<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span> private TransitionType type;<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> private RegionStateTransitionState initialState;<a name="line.110"></a>
+<span class="sourceLineNo">111</span><a name="line.111"></a>
+<span class="sourceLineNo">112</span> private RegionStateTransitionState lastState;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> // the candidate where we want to assign the region to.<a name="line.114"></a>
+<span class="sourceLineNo">115</span> private ServerName assignCandidate;<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span> private boolean forceNewPlan;<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span> private RetryCounter retryCounter;<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span> private RegionRemoteProcedureBase remoteProc;<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> public TransitRegionStateProcedure() {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> private void setInitalAndLastState() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span> switch (type) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> case ASSIGN:<a name="line.128"></a>
+<span class="sourceLineNo">129</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.130"></a>
+<span class="sourceLineNo">131</span> break;<a name="line.131"></a>
+<span class="sourceLineNo">132</span> case UNASSIGN:<a name="line.132"></a>
+<span class="sourceLineNo">133</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.133"></a>
+<span class="sourceLineNo">134</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> break;<a name="line.135"></a>
+<span class="sourceLineNo">136</span> case MOVE:<a name="line.136"></a>
+<span class="sourceLineNo">137</span> case REOPEN:<a name="line.137"></a>
+<span class="sourceLineNo">138</span> initialState = RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE;<a name="line.138"></a>
+<span class="sourceLineNo">139</span> lastState = RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> break;<a name="line.140"></a>
+<span class="sourceLineNo">141</span> default:<a name="line.141"></a>
+<span class="sourceLineNo">142</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.142"></a>
+<span class="sourceLineNo">143</span> }<a name="line.143"></a>
+<span class="sourceLineNo">144</span> }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span> @VisibleForTesting<a name="line.146"></a>
+<span class="sourceLineNo">147</span> protected TransitRegionStateProcedure(MasterProcedureEnv env, RegionInfo hri,<a name="line.147"></a>
+<span class="sourceLineNo">148</span> ServerName assignCandidate, boolean forceNewPlan, TransitionType type) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span> super(env, hri);<a name="line.149"></a>
+<span class="sourceLineNo">150</span> this.assignCandidate = assignCandidate;<a name="line.150"></a>
+<span class="sourceLineNo">151</span> this.forceNewPlan = forceNewPlan;<a name="line.151"></a>
+<span class="sourceLineNo">152</span> this.type = type;<a name="line.152"></a>
+<span class="sourceLineNo">153</span> setInitalAndLastState();<a name="line.153"></a>
+<span class="sourceLineNo">154</span> }<a name="line.154"></a>
+<span class="sourceLineNo">155</span><a name="line.155"></a>
+<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span> public TableOperationType getTableOperationType() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span> // TODO: maybe we should make another type here, REGION_TRANSITION?<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return TableOperationType.REGION_EDIT;<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> if (TableName.isMetaTableName(getTableName())) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span> return false;<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span> // First we need meta to be loaded, and second, if meta is not online then we will likely to<a name="line.167"></a>
+<span class="sourceLineNo">168</span> // fail when updating meta so we wait until it is assigned.<a name="line.168"></a>
+<span class="sourceLineNo">169</span> AssignmentManager am = env.getAssignmentManager();<a name="line.169"></a>
+<span class="sourceLineNo">170</span> return am.waitMetaLoaded(this) || am.waitMetaAssigned(this, getRegion());<a name="line.170"></a>
+<span class="sourceLineNo">171</span> }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span> private void queueAssign(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.173"></a>
+<span class="sourceLineNo">174</span> throws ProcedureSuspendedException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> // Here the assumption is that, the region must be in CLOSED state, so the region location<a name="line.175"></a>
+<span class="sourceLineNo">176</span> // will be null. And if we fail to open the region and retry here, the forceNewPlan will be<a name="line.176"></a>
+<span class="sourceLineNo">177</span> // true, and also we will set the region location to null.<a name="line.177"></a>
+<span class="sourceLineNo">178</span> boolean retain = false;<a name="line.178"></a>
+<span class="sourceLineNo">179</span> if (!forceNewPlan) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span> if (assignCandidate != null) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span> retain = assignCandidate.equals(regionNode.getLastHost());<a name="line.181"></a>
+<span class="sourceLineNo">182</span> regionNode.setRegionLocation(assignCandidate);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> } else if (regionNode.getLastHost() != null) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span> retain = true;<a name="line.184"></a>
+<span class="sourceLineNo">185</span> LOG.info("Setting lastHost as the region location {}", regionNode.getLastHost());<a name="line.185"></a>
+<span class="sourceLineNo">186</span> regionNode.setRegionLocation(regionNode.getLastHost());<a name="line.186"></a>
+<span class="sourceLineNo">187</span> }<a name="line.187"></a>
+<span class="sourceLineNo">188</span> }<a name="line.188"></a>
+<span class="sourceLineNo">189</span> LOG.info("Starting {}; {}; forceNewPlan={}, retain={}", this, regionNode.toShortString(),<a name="line.189"></a>
+<span class="sourceLineNo">190</span> forceNewPlan, retain);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> env.getAssignmentManager().queueAssign(regionNode);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_OPEN);<a name="line.192"></a>
+<span class="sourceLineNo">193</span> if (regionNode.getProcedureEvent().suspendIfNotReady(this)) {<a name="line.193"></a>
+<span class="sourceLineNo">194</span> throw new ProcedureSuspendedException();<a name="line.194"></a>
+<span class="sourceLineNo">195</span> }<a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span> private void openRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.198"></a>
+<span class="sourceLineNo">199</span> ServerName loc = regionNode.getRegionLocation();<a name="line.199"></a>
+<span class="sourceLineNo">200</span> if (loc == null) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span> LOG.warn("No location specified for {}, jump back to state {} to get one", getRegion(),<a name="line.201"></a>
+<span class="sourceLineNo">202</span> RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.202"></a>
+<span class="sourceLineNo">203</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.203"></a>
+<span class="sourceLineNo">204</span> return;<a name="line.204"></a>
+<span class="sourceLineNo">205</span> }<a name="line.205"></a>
+<span class="sourceLineNo">206</span> env.getAssignmentManager().regionOpening(regionNode);<a name="line.206"></a>
+<span class="sourceLineNo">207</span> addChildProcedure(new OpenRegionProcedure(this, getRegion(), loc));<a name="line.207"></a>
+<span class="sourceLineNo">208</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED);<a name="line.208"></a>
+<span class="sourceLineNo">209</span> }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span> private Flow confirmOpened(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.211"></a>
+<span class="sourceLineNo">212</span> throws IOException {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> if (regionNode.isInState(State.OPEN)) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span> retryCounter = null;<a name="line.214"></a>
+<span class="sourceLineNo">215</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_OPENED) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span> // we are the last state, finish<a name="line.216"></a>
+<span class="sourceLineNo">217</span> regionNode.unsetProcedure(this);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> ServerCrashProcedure.updateProgress(env, getParentProcId());<a name="line.218"></a>
+<span class="sourceLineNo">219</span> return Flow.NO_MORE_STATE;<a name="line.219"></a>
+<span class="sourceLineNo">220</span> }<a name="line.220"></a>
+<span class="sourceLineNo">221</span> // It is possible that we arrive here but confirm opened is not the last state, for example,<a name="line.221"></a>
+<span class="sourceLineNo">222</span> // when merging or splitting a region, we unassign the region from a RS and the RS is crashed,<a name="line.222"></a>
+<span class="sourceLineNo">223</span> // then there will be recovered edits for this region, we'd better make the region online<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // again and then unassign it, otherwise we have to fail the merge/split procedure as we may<a name="line.224"></a>
+<span class="sourceLineNo">225</span> // loss data.<a name="line.225"></a>
+<span class="sourceLineNo">226</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.226"></a>
+<span class="sourceLineNo">227</span> return Flow.HAS_MORE_STATE;<a name="line.227"></a>
+<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span> int retries = env.getAssignmentManager().getRegionStates().addToFailedOpen(regionNode)<a name="line.230"></a>
+<span class="sourceLineNo">231</span> .incrementAndGetRetries();<a name="line.231"></a>
+<span class="sourceLineNo">232</span> int maxAttempts = env.getAssignmentManager().getAssignMaxAttempts();<a name="line.232"></a>
+<span class="sourceLineNo">233</span> LOG.info("Retry={} of max={}; {}; {}", retries, maxAttempts, this, regionNode.toShortString());<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span> if (retries >= maxAttempts) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span> env.getAssignmentManager().regionFailedOpen(regionNode, true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> setFailure(getClass().getSimpleName(), new RetriesExhaustedException(<a name="line.237"></a>
+<span class="sourceLineNo">238</span> "Max attempts " + env.getAssignmentManager().getAssignMaxAttempts() + " exceeded"));<a name="line.238"></a>
+<span class="sourceLineNo">239</span> regionNode.unsetProcedure(this);<a name="line.239"></a>
+<span class="sourceLineNo">240</span> return Flow.NO_MORE_STATE;<a name="line.240"></a>
+<span class="sourceLineNo">241</span> }<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span> env.getAssignmentManager().regionFailedOpen(regionNode, false);<a name="line.243"></a>
+<span class="sourceLineNo">244</span> // we failed to assign the region, force a new plan<a name="line.244"></a>
+<span class="sourceLineNo">245</span> forceNewPlan = true;<a name="line.245"></a>
+<span class="sourceLineNo">246</span> regionNode.setRegionLocation(null);<a name="line.246"></a>
+<span class="sourceLineNo">247</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span> if (retries > env.getAssignmentManager().getAssignRetryImmediatelyMaxAttempts()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span> // Throw exception to backoff and retry when failed open too many times<a name="line.250"></a>
+<span class="sourceLineNo">251</span> throw new HBaseIOException("Failed to open region");<a name="line.251"></a>
+<span class="sourceLineNo">252</span> } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Here we do not throw exception because we want to the region to be online ASAP<a name="line.253"></a>
+<span class="sourceLineNo">254</span> return Flow.HAS_MORE_STATE;<a name="line.254"></a>
+<span class="sourceLineNo">255</span> }<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> private void closeRegion(MasterProcedureEnv env, RegionStateNode regionNode) throws IOException {<a name="line.258"></a>
+<span class="sourceLineNo">259</span> if (regionNode.isInState(State.OPEN, State.CLOSING, State.MERGING, State.SPLITTING)) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span> // this is the normal case<a name="line.260"></a>
+<span class="sourceLineNo">261</span> env.getAssignmentManager().regionClosing(regionNode);<a name="line.261"></a>
+<span class="sourceLineNo">262</span> addChildProcedure(new CloseRegionProcedure(this, getRegion(), regionNode.getRegionLocation(),<a name="line.262"></a>
+<span class="sourceLineNo">263</span> assignCandidate));<a name="line.263"></a>
+<span class="sourceLineNo">264</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED);<a name="line.264"></a>
+<span class="sourceLineNo">265</span> } else {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> forceNewPlan = true;<a name="line.266"></a>
+<span class="sourceLineNo">267</span> regionNode.setRegionLocation(null);<a name="line.267"></a>
+<span class="sourceLineNo">268</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.268"></a>
+<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">270</span> }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span> private Flow confirmClosed(MasterProcedureEnv env, RegionStateNode regionNode)<a name="line.272"></a>
+<span class="sourceLineNo">273</span> throws IOException {<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (regionNode.isInState(State.CLOSED)) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> retryCounter = null;<a name="line.275"></a>
+<span class="sourceLineNo">276</span> if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span> // we are the last state, finish<a name="line.277"></a>
+<span class="sourceLineNo">278</span> regionNode.unsetProcedure(this);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> return Flow.NO_MORE_STATE;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span> // This means we need to open the region again, should be a move or reopen<a name="line.281"></a>
+<span class="sourceLineNo">282</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.282"></a>
+<span class="sourceLineNo">283</span> return Flow.HAS_MORE_STATE;<a name="line.283"></a>
+<span class="sourceLineNo">284</span> }<a name="line.284"></a>
+<span class="sourceLineNo">285</span> if (regionNode.isInState(State.CLOSING)) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> // This is possible, think the target RS crashes and restarts immediately, the close region<a name="line.286"></a>
+<span class="sourceLineNo">287</span> // operation will return a NotServingRegionException soon, we can only recover after SCP takes<a name="line.287"></a>
+<span class="sourceLineNo">288</span> // care of this RS. So here we throw an IOException to let upper layer to retry with backoff.<a name="line.288"></a>
+<span class="sourceLineNo">289</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_CLOSE);<a name="line.289"></a>
+<span class="sourceLineNo">290</span> throw new HBaseIOException("Failed to close region");<a name="line.290"></a>
+<span class="sourceLineNo">291</span> }<a name="line.291"></a>
+<span class="sourceLineNo">292</span> // abnormally closed, need to reopen it, no matter what is the last state, see the comment in<a name="line.292"></a>
+<span class="sourceLineNo">293</span> // confirmOpened for more details that why we need to reopen the region first even if we just<a name="line.293"></a>
+<span class="sourceLineNo">294</span> // want to close it.<a name="line.294"></a>
+<span class="sourceLineNo">295</span> // The only exception is for non-default replica, where we do not need to deal with recovered<a name="line.295"></a>
+<span class="sourceLineNo">296</span> // edits. Notice that the region will remain in ABNORMALLY_CLOSED state, the upper layer need to<a name="line.296"></a>
+<span class="sourceLineNo">297</span> // deal with this state. For non-default replica, this is usually the same with CLOSED.<a name="line.297"></a>
+<span class="sourceLineNo">298</span> assert regionNode.isInState(State.ABNORMALLY_CLOSED);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (!RegionReplicaUtil.isDefaultReplica(getRegion()) &&<a name="line.299"></a>
+<span class="sourceLineNo">300</span> lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> regionNode.unsetProcedure(this);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> return Flow.NO_MORE_STATE;<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> retryCounter = null;<a name="line.304"></a>
+<span class="sourceLineNo">305</span> setNextState(RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE);<a name="line.305"></a>
+<span class="sourceLineNo">306</span> return Flow.HAS_MORE_STATE;<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span> // Override to lock RegionStateNode<a name="line.309"></a>
+<span class="sourceLineNo">310</span> @SuppressWarnings("rawtypes")<a name="line.310"></a>
+<span class="sourceLineNo">311</span> @Override<a name="line.311"></a>
+<span class="sourceLineNo">312</span> protected Procedure[] execute(MasterProcedureEnv env)<a name="line.312"></a>
+<span class="sourceLineNo">313</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.313"></a>
+<span class="sourceLineNo">314</span> RegionStateNode regionNode =<a name="line.314"></a>
+<span class="sourceLineNo">315</span> env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.315"></a>
+<span class="sourceLineNo">316</span> regionNode.lock();<a name="line.316"></a>
+<span class="sourceLineNo">317</span> try {<a name="line.317"></a>
+<span class="sourceLineNo">318</span> return super.execute(env);<a name="line.318"></a>
+<span class="sourceLineNo">319</span> } finally {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> regionNode.unlock();<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> }<a name="line.322"></a>
+<span class="sourceLineNo">323</span><a name="line.323"></a>
+<span class="sourceLineNo">324</span> private RegionStateNode getRegionStateNode(MasterProcedureEnv env) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span> return env.getAssignmentManager().getRegionStates().getOrCreateRegionStateNode(getRegion());<a name="line.325"></a>
+<span class="sourceLineNo">326</span> }<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span> @Override<a name="line.328"></a>
+<span class="sourceLineNo">329</span> protected Flow executeFromState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.329"></a>
+<span class="sourceLineNo">330</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.330"></a>
+<span class="sourceLineNo">331</span> RegionStateNode regionNode = getRegionStateNode(env);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> try {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> switch (state) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span> case REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE:<a name="line.334"></a>
+<span class="sourceLineNo">335</span> queueAssign(env, regionNode);<a name="line.335"></a>
+<span class="sourceLineNo">336</span> return Flow.HAS_MORE_STATE;<a name="line.336"></a>
+<span class="sourceLineNo">337</span> case REGION_STATE_TRANSITION_OPEN:<a name="line.337"></a>
+<span class="sourceLineNo">338</span> openRegion(env, regionNode);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> return Flow.HAS_MORE_STATE;<a name="line.339"></a>
+<span class="sourceLineNo">340</span> case REGION_STATE_TRANSITION_CONFIRM_OPENED:<a name="line.340"></a>
+<span class="sourceLineNo">341</span> return confirmOpened(env, regionNode);<a name="line.341"></a>
+<span class="sourceLineNo">342</span> case REGION_STATE_TRANSITION_CLOSE:<a name="line.342"></a>
+<span class="sourceLineNo">343</span> closeRegion(env, regionNode);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> return Flow.HAS_MORE_STATE;<a name="line.344"></a>
+<span class="sourceLineNo">345</span> case REGION_STATE_TRANSITION_CONFIRM_CLOSED:<a name="line.345"></a>
+<span class="sourceLineNo">346</span> return confirmClosed(env, regionNode);<a name="line.346"></a>
+<span class="sourceLineNo">347</span> default:<a name="line.347"></a>
+<span class="sourceLineNo">348</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> }<a name="line.349"></a>
+<span class="sourceLineNo">350</span> } catch (IOException e) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span> if (retryCounter == null) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span> retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.354"></a>
+<span class="sourceLineNo">355</span> LOG.warn(<a name="line.355"></a>
+<span class="sourceLineNo">356</span> "Failed transition, suspend {}secs {}; {}; waiting on rectified condition fixed " +<a name="line.356"></a>
+<span class="sourceLineNo">357</span> "by other Procedure or operator intervention",<a name="line.357"></a>
+<span class="sourceLineNo">358</span> backoff / 1000, this, regionNode.toShortString(), e);<a name="line.358"></a>
+<span class="sourceLineNo">359</span> setTimeout(Math.toIntExact(backoff));<a name="line.359"></a>
+<span class="sourceLineNo">360</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> skipPersistence();<a name="line.361"></a>
+<span class="sourceLineNo">362</span> throw new ProcedureSuspendedException();<a name="line.362"></a>
+<span class="sourceLineNo">363</span> }<a name="line.363"></a>
+<span class="sourceLineNo">364</span> }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> /**<a name="line.366"></a>
+<span class="sourceLineNo">367</span> * At end of timeout, wake ourselves up so we run again.<a name="line.367"></a>
+<span class="sourceLineNo">368</span> */<a name="line.368"></a>
+<span class="sourceLineNo">369</span> @Override<a name="line.369"></a>
+<span class="sourceLineNo">370</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.370"></a>
+<span class="sourceLineNo">371</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> env.getProcedureScheduler().addFront(this);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> return false; // 'false' means that this procedure handled the timeout<a name="line.373"></a>
+<span class="sourceLineNo">374</span> }<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span> // Should be called with RegionStateNode locked<a name="line.376"></a>
+<span class="sourceLineNo">377</span> public void reportTransition(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.377"></a>
+<span class="sourceLineNo">378</span> ServerName serverName, TransitionCode code, long seqId, long procId) throws IOException {<a name="line.378"></a>
+<span class="sourceLineNo">379</span> if (remoteProc == null) {<a name="line.379"></a>
+<span class="sourceLineNo">380</span> LOG.warn(<a name="line.380"></a>
+<span class="sourceLineNo">381</span> "There is no outstanding remote region procedure for {}, serverName={}, code={}," +<a name="line.381"></a>
+<span class="sourceLineNo">382</span> " seqId={}, proc={}, should be a retry, ignore",<a name="line.382"></a>
+<span class="sourceLineNo">383</span> regionNode, serverName, code, seqId, this);<a name="line.383"></a>
+<span class="sourceLineNo">384</span> return;<a name="line.384"></a>
+<span class="sourceLineNo">385</span> }<a name="line.385"></a>
+<span class="sourceLineNo">386</span> // The procId could be -1 if it is from an old region server, we need to deal with it so that we<a name="line.386"></a>
+<span class="sourceLineNo">387</span> // can do rolling upgraing.<a name="line.387"></a>
+<span class="sourceLineNo">388</span> if (procId >= 0 && remoteProc.getProcId() != procId) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span> LOG.warn(<a name="line.389"></a>
+<span class="sourceLineNo">390</span> "The pid of remote region procedure for {} is {}, the reported pid={}, serverName={}," +<a name="line.390"></a>
+<span class="sourceLineNo">391</span> " code={}, seqId={}, proc={}, should be a retry, ignore",<a name="line.391"></a>
+<span class="sourceLineNo">392</span> regionNode, remoteProc.getProcId(), procId, serverName, code, seqId, this);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> return;<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span> remoteProc.reportTransition(env, regionNode, serverName, code, seqId);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> }<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span> // Should be called with RegionStateNode locked<a name="line.398"></a>
+<span class="sourceLineNo">399</span> public void serverCrashed(MasterProcedureEnv env, RegionStateNode regionNode,<a name="line.399"></a>
+<span class="sourceLineNo">400</span> ServerName serverName) throws IOException {<a name="line.400"></a>
+<span class="sourceLineNo">401</span> if (remoteProc != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> // this means we are waiting for the sub procedure, so wake it up<a name="line.402"></a>
+<span class="sourceLineNo">403</span> remoteProc.serverCrashed(env, regionNode, serverName);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> } else {<a name="line.404"></a>
+<span class="sourceLineNo">405</span> // we are in RUNNING state, just update the region state, and we will process it later.<a name="line.405"></a>
+<span class="sourceLineNo">406</span> env.getAssignmentManager().regionClosed(regionNode, false);<a name="line.406"></a>
+<span class="sourceLineNo">407</span> }<a name="line.407"></a>
<span class="sourceLineNo">408</span> }<a name="line.408"></a>
<span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span> void unattachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> assert this.remoteProc == proc;<a name="line.411"></a>
-<span class="sourceLineNo">412</span> this.remoteProc = null;<a name="line.412"></a>
-<span class="sourceLineNo">413</span> }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span> @Override<a name="line.415"></a>
-<span class="sourceLineNo">416</span> protected void rollbackState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.416"></a>
-<span class="sourceLineNo">417</span> throws IOException, InterruptedException {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> // no rollback<a name="line.418"></a>
-<span class="sourceLineNo">419</span> throw new UnsupportedOperationException();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> @Override<a name="line.422"></a>
-<span class="sourceLineNo">423</span> protected RegionStateTransitionState getState(int stateId) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span> return RegionStateTransitionState.forNumber(stateId);<a name="line.424"></a>
-<span class="sourceLineNo">425</span> }<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span> protected int getStateId(RegionStateTransitionState state) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span> return state.getNumber();<a name="line.429"></a>
-<span class="sourceLineNo">430</span> }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span> @Override<a name="line.432"></a>
-<span class="sourceLineNo">433</span> protected RegionStateTransitionState getInitialState() {<a name="line.433"></a>
-<span class="sourceLineNo">434</span> return initialState;<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> private static TransitionType convert(RegionTransitionType type) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span> switch (type) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span> case ASSIGN:<a name="line.439"></a>
-<span class="sourceLineNo">440</span> return TransitionType.ASSIGN;<a name="line.440"></a>
-<span class="sourceLineNo">441</span> case UNASSIGN:<a name="line.441"></a>
-<span class="sourceLineNo">442</span> return TransitionType.UNASSIGN;<a name="line.442"></a>
-<span class="sourceLineNo">443</span> case MOVE:<a name="line.443"></a>
-<span class="sourceLineNo">444</span> return TransitionType.MOVE;<a name="line.444"></a>
-<span class="sourceLineNo">445</span> case REOPEN:<a name="line.445"></a>
-<span class="sourceLineNo">446</span> return TransitionType.REOPEN;<a name="line.446"></a>
-<span class="sourceLineNo">447</span> default:<a name="line.447"></a>
-<span class="sourceLineNo">448</span> throw new IllegalArgumentException("Unknown RegionTransitionType: " + type);<a name="line.448"></a>
-<span class="sourceLineNo">449</span> }<a name="line.449"></a>
-<span class="sourceLineNo">450</span> }<a name="line.450"></a>
-<span class="sourceLineNo">451</span><a name="line.451"></a>
-<span class="sourceLineNo">452</span> private static RegionTransitionType convert(TransitionType type) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> switch (type) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span> case ASSIGN:<a name="line.454"></a>
-<span class="sourceLineNo">455</span> return RegionTransitionType.ASSIGN;<a name="line.455"></a>
-<span class="sourceLineNo">456</span> case UNASSIGN:<a name="line.456"></a>
-<span class="sourceLineNo">457</span> return RegionTransitionType.UNASSIGN;<a name="line.457"></a>
-<span class="sourceLineNo">458</span> case MOVE:<a name="line.458"></a>
-<span class="sourceLineNo">459</span> return RegionTransitionType.MOVE;<a name="line.459"></a>
-<span class="sourceLineNo">460</span> case REOPEN:<a name="line.460"></a>
-<span class="sourceLineNo">461</span> return RegionTransitionType.REOPEN;<a name="line.461"></a>
-<span class="sourceLineNo">462</span> default:<a name="line.462"></a>
-<span class="sourceLineNo">463</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.463"></a>
-<span class="sourceLineNo">464</span> }<a name="line.464"></a>
-<span class="sourceLineNo">465</span> }<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> @Override<a name="line.467"></a>
-<span class="sourceLineNo">468</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.468"></a>
-<span class="sourceLineNo">469</span> super.serializeStateData(serializer);<a name="line.469"></a>
-<span class="sourceLineNo">470</span> RegionStateTransitionStateData.Builder builder = RegionStateTransitionStateData.newBuilder()<a name="line.470"></a>
-<span class="sourceLineNo">471</span> .setType(convert(type)).setForceNewPlan(forceNewPlan);<a name="line.471"></a>
-<span class="sourceLineNo">472</span> if (assignCandidate != null) {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> builder.setAssignCandidate(ProtobufUtil.toServerName(assignCandidate));<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span> serializer.serialize(builder.build());<a name="line.475"></a>
-<span class="sourceLineNo">476</span> }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span> @Override<a name="line.478"></a>
-<span class="sourceLineNo">479</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.479"></a>
-<span class="sourceLineNo">480</span> super.deserializeStateData(serializer);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> RegionStateTransitionStateData data =<a name="line.481"></a>
-<span class="sourceLineNo">482</span> serializer.deserialize(RegionStateTransitionStateData.class);<a name="line.482"></a>
-<span class="sourceLineNo">483</span> type = convert(data.getType());<a name="line.483"></a>
-<span class="sourceLineNo">484</span> setInitalAndLastState();<a name="line.484"></a>
-<span class="sourceLineNo">485</span> forceNewPlan = data.getForceNewPlan();<a name="line.485"></a>
-<span class="sourceLineNo">486</span> if (data.hasAssignCandidate()) {<a name="line.486"></a>
-<span class="sourceLineNo">487</span> assignCandidate = ProtobufUtil.toServerName(data.getAssignCandidate());<a name="line.487"></a>
-<span class="sourceLineNo">488</span> }<a name="line.488"></a>
-<span class="sourceLineNo">489</span> }<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span> @Override<a name="line.491"></a>
-<span class="sourceLineNo">492</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span> MetricsAssignmentManager metrics = env.getAssignmentManager().getAssignmentManagerMetrics();<a name="line.493"></a>
-<span class="sourceLineNo">494</span> switch (type) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span> case ASSIGN:<a name="line.495"></a>
-<span class="sourceLineNo">496</span> return metrics.getAssignProcMetrics();<a name="line.496"></a>
-<span class="sourceLineNo">497</span> case UNASSIGN:<a name="line.497"></a>
-<span class="sourceLineNo">498</span> return metrics.getUnassignProcMetrics();<a name="line.498"></a>
-<span class="sourceLineNo">499</span> case MOVE:<a name="line.499"></a>
-<span class="sourceLineNo">500</span> return metrics.getMoveProcMetrics();<a name="line.500"></a>
-<span class="sourceLineNo">501</span> case REOPEN:<a name="line.501"></a>
-<span class="sourceLineNo">502</span> return metrics.getReopenProcMetrics();<a name="line.502"></a>
-<span class="sourceLineNo">503</span> default:<a name="line.503"></a>
-<span class="sourceLineNo">504</span> throw new IllegalArgumentException("Unknown transition type: " + type);<a name="line.504"></a>
-<span class="sourceLineNo">505</span> }<a name="line.505"></a>
-<span class="sourceLineNo">506</span> }<a name="line.506"></a>
-<span class="sourceLineNo">507</span><a name="line.507"></a>
-<span class="sourceLineNo">508</span> @Override<a name="line.508"></a>
-<span class="sourceLineNo">509</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span> super.toStringClassDetails(sb);<a name="line.510"></a>
-<span class="sourceLineNo">511</span> if (initialState == RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span> sb.append(", ASSIGN");<a name="line.512"></a>
-<span class="sourceLineNo">513</span> } else if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> sb.append(", UNASSIGN");<a name="line.514"></a>
-<span class="sourceLineNo">515</span> } else {<a name="line.515"></a>
-<span class="sourceLineNo">516</span> sb.append(", REOPEN/MOVE");<a name="line.516"></a>
-<span class="sourceLineNo">517</span> }<a name="line.517"></a>
-<span class="sourceLineNo">518</span> }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span> private static TransitRegionStateProcedure setOwner(MasterProcedureEnv env,<a name="line.520"></a>
-<span class="sourceLineNo">521</span> TransitRegionStateProcedure proc) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span> proc.setOwner(env.getRequestUser().getShortName());<a name="line.522"></a>
-<span class="sourceLineNo">523</span> return proc;<a name="line.523"></a>
-<span class="sourceLineNo">524</span> }<a name="line.524"></a>
-<span class="sourceLineNo">525</span><a name="line.525"></a>
-<span class="sourceLineNo">526</span> public enum TransitionType {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> ASSIGN, UNASSIGN, MOVE, REOPEN<a name="line.527"></a>
+<span class="sourceLineNo">410</span> void attachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> this.remoteProc = proc;<a name="line.411"></a>
+<span class="sourceLineNo">412</span> }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span> void unattachRemoteProc(RegionRemoteProcedureBase proc) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span> assert this.remoteProc == proc;<a name="line.415"></a>
+<span class="sourceLineNo">416</span> this.remoteProc = null;<a name="line.416"></a>
+<span class="sourceLineNo">417</span> }<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span> @Override<a name="line.419"></a>
+<span class="sourceLineNo">420</span> protected void rollbackState(MasterProcedureEnv env, RegionStateTransitionState state)<a name="line.420"></a>
+<span class="sourceLineNo">421</span> throws IOException, InterruptedException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span> // no rollback<a name="line.422"></a>
+<span class="sourceLineNo">423</span> throw new UnsupportedOperationException();<a name="line.423"></a>
+<span class="sourceLineNo">424</span> }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> @Override<a name="line.426"></a>
+<span class="sourceLineNo">427</span> protected RegionStateTransitionState getState(int stateId) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span> return RegionStateTransitionState.forNumber(stateId);<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> @Override<a name="line.431"></a>
+<span class="sourceLineNo">432</span> protected int getStateId(RegionStateTransitionState state) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> return state.getNumber();<a name="line.433"></a>
+<span class="sourceLineNo">434</span> }<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span> @Override<a name="line.436"></a>
+<span class="sourceLineNo">437</span> protected RegionStateTransitionState getInitialState() {<a name="line.437"></a>
+<span class="sourceLineNo">438</span> return initialState;<a name="line.438"></a>
+<span class="sourceLineNo">439</span> }<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span> private static TransitionType convert(RegionTransitionType type) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span> switch (type) {<a name="line.442"></a>
+<span class="sourceLineNo">443</span> case ASSIGN:<a name="line.443"></a>
+<span class="sourceLineNo">444</span> return TransitionType.ASSIGN;<a name="line.444"></a>
+<span class="sourceLineNo">445</span> case UNASSIGN:<a name="line.445"></a>
+<span class="sourceLineNo">446</span> return TransitionType.UNASSIGN;<a name="line.446"></a>
+<span class="sourceLineNo">447</span> case MOVE:<a name="line.447"></a>
+<span class="sourceLineNo">448</span> return TransitionType.MOVE;<a name="line.448"></a>
+<span class="sourceLineNo">449</span> case REOPEN:<a name="line.449"></a>
+<span class="sourceLineNo">450</span> return TransitionType.REOPEN;<a name="line.450"></a>
+<span class="sourceLineNo">451</span> default:<a name="line.451"></a>
+<span class="sourceLineNo">452</span> throw new IllegalArgumentException("Unknown RegionTransitionType: " + type);<a name="line.452"></a>
+<span class="sourceLineNo">453</span> }<a name="line.453"></a>
+<span class="sourceLineNo">454</span> }<a name="line.454"></a>
+<span class="sourceLineNo">455</span><a name="line.455"></a>
+<span class="sourceLineNo">456</span> private static RegionTransitionType convert(TransitionType type) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span> switch (type) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span> case ASSIGN:<a name="line.458"></a>
+<span class="sourceLineNo">459</span> return RegionTransitionType.ASSIGN;<a name="line.459"></a>
+<span class="sourceLineNo">460</span> case UNASSIGN:<a name="line.460"></a>
+<span class="sourceLineNo">461</span> return RegionTransitionType.UNASSIGN;<a name="line.461"></a>
+<span class="sourceLineNo">462</span> case MOVE:<a name="line.462"></a>
+<span class="sourceLineNo">463</span> return RegionTransitionType.MOVE;<a name="line.463"></a>
+<span class="sourceLineNo">464</span> case REOPEN:<a name="line.464"></a>
+<span class="sourceLineNo">465</span> return RegionTransitionType.REOPEN;<a name="line.465"></a>
+<span class="sourceLineNo">466</span> default:<a name="line.466"></a>
+<span class="sourceLineNo">467</span> throw new IllegalArgumentException("Unknown TransitionType: " + type);<a name="line.467"></a>
+<span class="sourceLineNo">468</span> }<a name="line.468"></a>
+<span class="sourceLineNo">469</span> }<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span> @Override<a name="line.471"></a>
+<span class="sourceLineNo">472</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.472"></a>
+<span class="sourceLineNo">473</span> super.serializeStateData(serializer);<a name="line.473"></a>
+<span class="sourceLineNo">474</span> RegionStateTransitionStateData.Builder builder = RegionStateTransitionStateData.newBuilder()<a name="line.474"></a>
+<span class="sourceLineNo">475</span> .setType(convert(type)).setForceNewPlan(forceNewPlan);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> if (assignCandidate != null) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span> builder.setAssignCandidate(ProtobufUtil.toServerName(assignCandidate));<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span> serializer.serialize(builder.build());<a name="line.479"></a>
+<span class="sourceLineNo">480</span> }<a name="line.480"></a>
+<span class="sourceLineNo">481</span><a name="line.481"></a>
+<span class="sourceLineNo">482</span> @Override<a name="line.482"></a>
+<span class="sourceLineNo">483</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.483"></a>
+<span class="sourceLineNo">484</span> super.deserializeStateData(serializer);<a name="line.484"></a>
+<span class="sourceLineNo">485</span> RegionStateTransitionStateData data =<a name="line.485"></a>
+<span class="sourceLineNo">486</span> serializer.deserialize(RegionStateTransitionStateData.class);<a name="line.486"></a>
+<span class="sourceLineNo">487</span> type = convert(data.getType());<a name="line.487"></a>
+<span class="sourceLineNo">488</span> setInitalAndLastState();<a name="line.488"></a>
+<span class="sourceLineNo">489</span> forceNewPlan = data.getForceNewPlan();<a name="line.489"></a>
+<span class="sourceLineNo">490</span> if (data.hasAssignCandidate()) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span> assignCandidate = ProtobufUtil.toServerName(data.getAssignCandidate());<a name="line.491"></a>
+<span class="sourceLineNo">492</span> }<a name="line.492"></a>
+<span class="sourceLineNo">493</span> }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span> @Override<a name="line.495"></a>
+<span class="sourceLineNo">496</span> protected ProcedureMetrics getProcedureMetrics(MasterProcedureEnv env) {<a name="line.496"></a>
+<span class="sourceLineNo">497</span> MetricsAssignmentManager metrics = env.getAssignmentManager().getAssignmentManagerMetrics();<a name="line.497"></a>
+<span class="sourceLineNo">498</span> switch (type) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span> case ASSIGN:<a name="line.499"></a>
+<span class="sourceLineNo">500</span> return metrics.getAssignProcMetrics();<a name="line.500"></a>
+<span class="sourceLineNo">501</span> case UNASSIGN:<a name="line.501"></a>
+<span class="sourceLineNo">502</span> return metrics.getUnassignProcMetrics();<a name="line.502"></a>
+<span class="sourceLineNo">503</span> case MOVE:<a name="line.503"></a>
+<span class="sourceLineNo">504</span> return metrics.getMoveProcMetrics();<a name="line.504"></a>
+<span class="sourceLineNo">505</span> case REOPEN:<a name="line.505"></a>
+<span class="sourceLineNo">506</span> return metrics.getReopenProcMetrics();<a name="line.506"></a>
+<span class="sourceLineNo">507</span> default:<a name="line.507"></a>
+<span class="sourceLineNo">508</span> throw new IllegalArgumentException("Unknown transition type: " + type);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> }<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span> @Override<a name="line.512"></a>
+<span class="sourceLineNo">513</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span> super.toStringClassDetails(sb);<a name="line.514"></a>
+<span class="sourceLineNo">515</span> if (initialState == RegionStateTransitionState.REGION_STATE_TRANSITION_GET_ASSIGN_CANDIDATE) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span> sb.append(", ASSIGN");<a name="line.516"></a>
+<span class="sourceLineNo">517</span> } else if (lastState == RegionStateTransitionState.REGION_STATE_TRANSITION_CONFIRM_CLOSED) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span> sb.append(", UNASSIGN");<a name="line.518"></a>
+<span class="sourceLineNo">519</span> } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span> sb.append(", REOPEN/MOVE");<a name="line.520"></a>
+<span class="sourceLineNo">521</span> }<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> private static TransitRegionStateProcedure setOwner(MasterProcedureEnv env,<a name="line.524"></a>
+<span class="sourceLineNo">525</span> TransitRegionStateProcedure proc) {<a name="line.525"></a>
+<span class="sourceLineNo">526</span> proc.setOwner(env.getRequestUser().getShortName());<a name="line.526"></a>
+<span class="sourceLineNo">527</span> return proc;<a name="line.527"></a>
<span class="sourceLineNo">528</span> }<a name="line.528"></a>
<span class="sourceLineNo">529</span><a name="line.529"></a>
-<span class="sourceLineNo">530</span> // Be careful that, when you call these 4 methods below, you need to manually attach the returned<a name="line.530"></a>
-<span class="sourceLineNo">531</span> // procedure with the RegionStateNode, otherwise the procedure will quit immediately without doing<a name="line.531"></a>
-<span class="sourceLineNo">532</span> // anything. See the comment in executeFromState to find out why we need this assumption.<a name="line.532"></a>
-<span class="sourceLineNo">533</span> public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,<a name="line.533"></a>
-<span class="sourceLineNo">534</span> @Nullable ServerName targetServer) {<a name="line.534"></a>
-<span class="sourceLineNo">535</span> return setOwner(env,<a name="line.535"></a>
-<span class="sourceLineNo">536</span> new TransitRegionStateProcedure(env, region, targetServer, false, TransitionType.ASSIGN));<a name="line.536"></a>
-<span class="sourceLineNo">537</span> }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span> public static TransitRegionStateProcedure unassign(MasterProcedureEnv env, RegionInfo region) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span> return setOwner(env,<a name="line.540"></a>
-<span class="sourceLineNo">541</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.UNASSIGN));<a name="line.541"></a>
-<span class="sourceLineNo">542</span> }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span> public static TransitRegionStateProcedure reopen(MasterProcedureEnv env, RegionInfo region) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> return setOwner(env,<a name="line.545"></a>
-<span class="sourceLineNo">546</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.REOPEN));<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span> public static TransitRegionStateProcedure move(MasterProcedureEnv env, RegionInfo region,<a name="line.549"></a>
-<span class="sourceLineNo">550</span> @Nullable ServerName targetServer) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> return setOwner(env, new TransitRegionStateProcedure(env, region, targetServer,<a name="line.551"></a>
-<span class="sourceLineNo">552</span> targetServer == null, TransitionType.MOVE));<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span>}<a name="line.554"></a>
+<span class="sourceLineNo">530</span> public enum TransitionType {<a name="line.530"></a>
+<span class="sourceLineNo">531</span> ASSIGN, UNASSIGN, MOVE, REOPEN<a name="line.531"></a>
+<span class="sourceLineNo">532</span> }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span> // Be careful that, when you call these 4 methods below, you need to manually attach the returned<a name="line.534"></a>
+<span class="sourceLineNo">535</span> // procedure with the RegionStateNode, otherwise the procedure will quit immediately without doing<a name="line.535"></a>
+<span class="sourceLineNo">536</span> // anything. See the comment in executeFromState to find out why we need this assumption.<a name="line.536"></a>
+<span class="sourceLineNo">537</span> public static TransitRegionStateProcedure assign(MasterProcedureEnv env, RegionInfo region,<a name="line.537"></a>
+<span class="sourceLineNo">538</span> @Nullable ServerName targetServer) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span> return setOwner(env,<a name="line.539"></a>
+<span class="sourceLineNo">540</span> new TransitRegionStateProcedure(env, region, targetServer, false, TransitionType.ASSIGN));<a name="line.540"></a>
+<span class="sourceLineNo">541</span> }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span> public static TransitRegionStateProcedure unassign(MasterProcedureEnv env, RegionInfo region) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span> return setOwner(env,<a name="line.544"></a>
+<span class="sourceLineNo">545</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.UNASSIGN));<a name="line.545"></a>
+<span class="sourceLineNo">546</span> }<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span> public static TransitRegionStateProcedure reopen(MasterProcedureEnv env, RegionInfo region) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span> return setOwner(env,<a name="line.549"></a>
+<span class="sourceLineNo">550</span> new TransitRegionStateProcedure(env, region, null, false, TransitionType.REOPEN));<a name="line.550"></a>
+<span class="sourceLineNo">551</span> }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span> public static TransitRegionStateProcedure move(MasterProcedureEnv env, RegionInfo region,<a name="line.553"></a>
+<span class="sourceLineNo">554</span> @Nullable ServerName targetServer) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span> return setOwner(env, new TransitRegionStateProcedure(env, region, targetServer,<a name="line.555"></a>
+<span class="sourceLineNo">556</span> targetServer == null, TransitionType.MOVE));<a name="line.556"></a>
+<span class="sourceLineNo">557</span> }<a name="line.557"></a>
+<span class="sourceLineNo">558</span>}<a name="line.558"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html
index 4cef626..e1c8374 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/InitMetaProcedure.html
@@ -40,135 +40,139 @@
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaStateData;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * This procedure is used to initialize meta table for a new hbase deploy. It will just schedule an<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * {@link TransitRegionStateProcedure} to assign meta.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
-<span class="sourceLineNo">048</span>public class InitMetaProcedure extends AbstractStateMachineTableProcedure<InitMetaState> {<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span> private static final Logger LOG = LoggerFactory.getLogger(InitMetaProcedure.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> private CountDownLatch latch = new CountDownLatch(1);<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span> private int attempts;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span> @Override<a name="line.56"></a>
-<span class="sourceLineNo">057</span> public TableName getTableName() {<a name="line.57"></a>
-<span class="sourceLineNo">058</span> return TableName.META_TABLE_NAME;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span> @Override<a name="line.61"></a>
-<span class="sourceLineNo">062</span> public TableOperationType getTableOperationType() {<a name="line.62"></a>
-<span class="sourceLineNo">063</span> return TableOperationType.CREATE;<a name="line.63"></a>
-<span class="sourceLineNo">064</span> }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> protected Flow executeFromState(MasterProcedureEnv env, InitMetaState state)<a name="line.67"></a>
-<span class="sourceLineNo">068</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.68"></a>
-<span class="sourceLineNo">069</span> LOG.debug("Execute {}", this);<a name="line.69"></a>
-<span class="sourceLineNo">070</span> switch (state) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span> case INIT_META_ASSIGN_META:<a name="line.71"></a>
-<span class="sourceLineNo">072</span> LOG.info("Going to assign meta");<a name="line.72"></a>
-<span class="sourceLineNo">073</span> addChildProcedure(env.getAssignmentManager()<a name="line.73"></a>
-<span class="sourceLineNo">074</span> .createAssignProcedures(Arrays.asList(RegionInfoBuilder.FIRST_META_REGIONINFO)));<a name="line.74"></a>
-<span class="sourceLineNo">075</span> setNextState(InitMetaState.INIT_META_CREATE_NAMESPACES);<a name="line.75"></a>
-<span class="sourceLineNo">076</span> return Flow.HAS_MORE_STATE;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> case INIT_META_CREATE_NAMESPACES:<a name="line.77"></a>
-<span class="sourceLineNo">078</span> LOG.info("Going to create {} and {} namespaces", DEFAULT_NAMESPACE, SYSTEM_NAMESPACE);<a name="line.78"></a>
-<span class="sourceLineNo">079</span> try {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> createDirectory(env, DEFAULT_NAMESPACE);<a name="line.80"></a>
-<span class="sourceLineNo">081</span> createDirectory(env, SYSTEM_NAMESPACE);<a name="line.81"></a>
-<span class="sourceLineNo">082</span> // here the TableNamespaceManager has not been initialized yet, so we have to insert the<a name="line.82"></a>
-<span class="sourceLineNo">083</span> // record directly into meta table, later the TableNamespaceManager will load these two<a name="line.83"></a>
-<span class="sourceLineNo">084</span> // namespaces when starting.<a name="line.84"></a>
-<span class="sourceLineNo">085</span> insertNamespaceToMeta(env.getMasterServices().getConnection(), DEFAULT_NAMESPACE);<a name="line.85"></a>
-<span class="sourceLineNo">086</span> insertNamespaceToMeta(env.getMasterServices().getConnection(), SYSTEM_NAMESPACE);<a name="line.86"></a>
-<span class="sourceLineNo">087</span> } catch (IOException e) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span> long backoff = ProcedureUtil.getBackoffTimeMs(this.attempts++);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> LOG.warn("Failed to init default and system namespaces, suspend {}secs", backoff, e);<a name="line.89"></a>
-<span class="sourceLineNo">090</span> setTimeout(Math.toIntExact(backoff));<a name="line.90"></a>
-<span class="sourceLineNo">091</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.91"></a>
-<span class="sourceLineNo">092</span> skipPersistence();<a name="line.92"></a>
-<span class="sourceLineNo">093</span> throw new ProcedureSuspendedException();<a name="line.93"></a>
-<span class="sourceLineNo">094</span> }<a name="line.94"></a>
-<span class="sourceLineNo">095</span> return Flow.NO_MORE_STATE;<a name="line.95"></a>
-<span class="sourceLineNo">096</span> default:<a name="line.96"></a>
-<span class="sourceLineNo">097</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.97"></a>
-<span class="sourceLineNo">098</span> }<a name="line.98"></a>
-<span class="sourceLineNo">099</span> }<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span> @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span> // we do not need to wait for master initialized, we are part of the initialization.<a name="line.103"></a>
-<span class="sourceLineNo">104</span> return false;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.109"></a>
-<span class="sourceLineNo">110</span> env.getProcedureScheduler().addFront(this);<a name="line.110"></a>
-<span class="sourceLineNo">111</span> return false;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span> @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span> protected LockState acquireLock(MasterProcedureEnv env) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span> if (env.getProcedureScheduler().waitTableExclusiveLock(this, getTableName())) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> return LockState.LOCK_EVENT_WAIT;<a name="line.117"></a>
-<span class="sourceLineNo">118</span> }<a name="line.118"></a>
-<span class="sourceLineNo">119</span> return LockState.LOCK_ACQUIRED;<a name="line.119"></a>
-<span class="sourceLineNo">120</span> }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span> @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span> protected void rollbackState(MasterProcedureEnv env, InitMetaState state)<a name="line.123"></a>
-<span class="sourceLineNo">124</span> throws IOException, InterruptedException {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> throw new UnsupportedOperationException();<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span> @Override<a name="line.128"></a>
-<span class="sourceLineNo">129</span> protected InitMetaState getState(int stateId) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return InitMetaState.forNumber(stateId);<a name="line.130"></a>
-<span class="sourceLineNo">131</span> }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span> @Override<a name="line.133"></a>
-<span class="sourceLineNo">134</span> protected int getStateId(InitMetaState state) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span> return state.getNumber();<a name="line.135"></a>
-<span class="sourceLineNo">136</span> }<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span> @Override<a name="line.138"></a>
-<span class="sourceLineNo">139</span> protected InitMetaState getInitialState() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span> return InitMetaState.INIT_META_ASSIGN_META;<a name="line.140"></a>
-<span class="sourceLineNo">141</span> }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> @Override<a name="line.143"></a>
-<span class="sourceLineNo">144</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> super.serializeStateData(serializer);<a name="line.145"></a>
-<span class="sourceLineNo">146</span> serializer.serialize(InitMetaStateData.getDefaultInstance());<a name="line.146"></a>
-<span class="sourceLineNo">147</span> }<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> @Override<a name="line.149"></a>
-<span class="sourceLineNo">150</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.150"></a>
-<span class="sourceLineNo">151</span> super.deserializeStateData(serializer);<a name="line.151"></a>
-<span class="sourceLineNo">152</span> serializer.deserialize(InitMetaStateData.class);<a name="line.152"></a>
-<span class="sourceLineNo">153</span> }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span> protected void completionCleanup(MasterProcedureEnv env) {<a name="line.156"></a>
-<span class="sourceLineNo">157</span> latch.countDown();<a name="line.157"></a>
-<span class="sourceLineNo">158</span> }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span> public void await() throws InterruptedException {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> latch.await();<a name="line.161"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaState;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.InitMetaStateData;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * This procedure is used to initialize meta table for a new hbase deploy. It will just schedule an<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * {@link TransitRegionStateProcedure} to assign meta.<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
+<span class="sourceLineNo">049</span>public class InitMetaProcedure extends AbstractStateMachineTableProcedure<InitMetaState> {<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span> private static final Logger LOG = LoggerFactory.getLogger(InitMetaProcedure.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span> private CountDownLatch latch = new CountDownLatch(1);<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span> private RetryCounter retryCounter;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span> @Override<a name="line.57"></a>
+<span class="sourceLineNo">058</span> public TableName getTableName() {<a name="line.58"></a>
+<span class="sourceLineNo">059</span> return TableName.META_TABLE_NAME;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> }<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span> @Override<a name="line.62"></a>
+<span class="sourceLineNo">063</span> public TableOperationType getTableOperationType() {<a name="line.63"></a>
+<span class="sourceLineNo">064</span> return TableOperationType.CREATE;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> @Override<a name="line.67"></a>
+<span class="sourceLineNo">068</span> protected Flow executeFromState(MasterProcedureEnv env, InitMetaState state)<a name="line.68"></a>
+<span class="sourceLineNo">069</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.69"></a>
+<span class="sourceLineNo">070</span> LOG.debug("Execute {}", this);<a name="line.70"></a>
+<span class="sourceLineNo">071</span> switch (state) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span> case INIT_META_ASSIGN_META:<a name="line.72"></a>
+<span class="sourceLineNo">073</span> LOG.info("Going to assign meta");<a name="line.73"></a>
+<span class="sourceLineNo">074</span> addChildProcedure(env.getAssignmentManager()<a name="line.74"></a>
+<span class="sourceLineNo">075</span> .createAssignProcedures(Arrays.asList(RegionInfoBuilder.FIRST_META_REGIONINFO)));<a name="line.75"></a>
+<span class="sourceLineNo">076</span> setNextState(InitMetaState.INIT_META_CREATE_NAMESPACES);<a name="line.76"></a>
+<span class="sourceLineNo">077</span> return Flow.HAS_MORE_STATE;<a name="line.77"></a>
+<span class="sourceLineNo">078</span> case INIT_META_CREATE_NAMESPACES:<a name="line.78"></a>
+<span class="sourceLineNo">079</span> LOG.info("Going to create {} and {} namespaces", DEFAULT_NAMESPACE, SYSTEM_NAMESPACE);<a name="line.79"></a>
+<span class="sourceLineNo">080</span> try {<a name="line.80"></a>
+<span class="sourceLineNo">081</span> createDirectory(env, DEFAULT_NAMESPACE);<a name="line.81"></a>
+<span class="sourceLineNo">082</span> createDirectory(env, SYSTEM_NAMESPACE);<a name="line.82"></a>
+<span class="sourceLineNo">083</span> // here the TableNamespaceManager has not been initialized yet, so we have to insert the<a name="line.83"></a>
+<span class="sourceLineNo">084</span> // record directly into meta table, later the TableNamespaceManager will load these two<a name="line.84"></a>
+<span class="sourceLineNo">085</span> // namespaces when starting.<a name="line.85"></a>
+<span class="sourceLineNo">086</span> insertNamespaceToMeta(env.getMasterServices().getConnection(), DEFAULT_NAMESPACE);<a name="line.86"></a>
+<span class="sourceLineNo">087</span> insertNamespaceToMeta(env.getMasterServices().getConnection(), SYSTEM_NAMESPACE);<a name="line.87"></a>
+<span class="sourceLineNo">088</span> } catch (IOException e) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span> if (retryCounter == null) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());<a name="line.90"></a>
+<span class="sourceLineNo">091</span> }<a name="line.91"></a>
+<span class="sourceLineNo">092</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.92"></a>
+<span class="sourceLineNo">093</span> LOG.warn("Failed to init default and system namespaces, suspend {}secs", backoff, e);<a name="line.93"></a>
+<span class="sourceLineNo">094</span> setTimeout(Math.toIntExact(backoff));<a name="line.94"></a>
+<span class="sourceLineNo">095</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.95"></a>
+<span class="sourceLineNo">096</span> skipPersistence();<a name="line.96"></a>
+<span class="sourceLineNo">097</span> throw new ProcedureSuspendedException();<a name="line.97"></a>
+<span class="sourceLineNo">098</span> }<a name="line.98"></a>
+<span class="sourceLineNo">099</span> return Flow.NO_MORE_STATE;<a name="line.99"></a>
+<span class="sourceLineNo">100</span> default:<a name="line.100"></a>
+<span class="sourceLineNo">101</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.101"></a>
+<span class="sourceLineNo">102</span> }<a name="line.102"></a>
+<span class="sourceLineNo">103</span> }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span> @Override<a name="line.105"></a>
+<span class="sourceLineNo">106</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> // we do not need to wait for master initialized, we are part of the initialization.<a name="line.107"></a>
+<span class="sourceLineNo">108</span> return false;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.113"></a>
+<span class="sourceLineNo">114</span> env.getProcedureScheduler().addFront(this);<a name="line.114"></a>
+<span class="sourceLineNo">115</span> return false;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span> @Override<a name="line.118"></a>
+<span class="sourceLineNo">119</span> protected LockState acquireLock(MasterProcedureEnv env) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> if (env.getProcedureScheduler().waitTableExclusiveLock(this, getTableName())) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span> return LockState.LOCK_EVENT_WAIT;<a name="line.121"></a>
+<span class="sourceLineNo">122</span> }<a name="line.122"></a>
+<span class="sourceLineNo">123</span> return LockState.LOCK_ACQUIRED;<a name="line.123"></a>
+<span class="sourceLineNo">124</span> }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> @Override<a name="line.126"></a>
+<span class="sourceLineNo">127</span> protected void rollbackState(MasterProcedureEnv env, InitMetaState state)<a name="line.127"></a>
+<span class="sourceLineNo">128</span> throws IOException, InterruptedException {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> throw new UnsupportedOperationException();<a name="line.129"></a>
+<span class="sourceLineNo">130</span> }<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span> @Override<a name="line.132"></a>
+<span class="sourceLineNo">133</span> protected InitMetaState getState(int stateId) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span> return InitMetaState.forNumber(stateId);<a name="line.134"></a>
+<span class="sourceLineNo">135</span> }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span> @Override<a name="line.137"></a>
+<span class="sourceLineNo">138</span> protected int getStateId(InitMetaState state) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span> return state.getNumber();<a name="line.139"></a>
+<span class="sourceLineNo">140</span> }<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span> @Override<a name="line.142"></a>
+<span class="sourceLineNo">143</span> protected InitMetaState getInitialState() {<a name="line.143"></a>
+<span class="sourceLineNo">144</span> return InitMetaState.INIT_META_ASSIGN_META;<a name="line.144"></a>
+<span class="sourceLineNo">145</span> }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span> @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.148"></a>
+<span class="sourceLineNo">149</span> super.serializeStateData(serializer);<a name="line.149"></a>
+<span class="sourceLineNo">150</span> serializer.serialize(InitMetaStateData.getDefaultInstance());<a name="line.150"></a>
+<span class="sourceLineNo">151</span> }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span> @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.154"></a>
+<span class="sourceLineNo">155</span> super.deserializeStateData(serializer);<a name="line.155"></a>
+<span class="sourceLineNo">156</span> serializer.deserialize(InitMetaStateData.class);<a name="line.156"></a>
+<span class="sourceLineNo">157</span> }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span> @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span> protected void completionCleanup(MasterProcedureEnv env) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span> latch.countDown();<a name="line.161"></a>
<span class="sourceLineNo">162</span> }<a name="line.162"></a>
-<span class="sourceLineNo">163</span>}<a name="line.163"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span> public void await() throws InterruptedException {<a name="line.164"></a>
+<span class="sourceLineNo">165</span> latch.await();<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span>}<a name="line.167"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html
index 3d17e10..77c7e55 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html
@@ -37,171 +37,175 @@
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.Logger;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.slf4j.LoggerFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsStateData;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * Used for reopening the regions for a table.<a name="line.42"></a>
-<span class="sourceLineNo">043</span> */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>@InterfaceAudience.Private<a name="line.44"></a>
-<span class="sourceLineNo">045</span>public class ReopenTableRegionsProcedure<a name="line.45"></a>
-<span class="sourceLineNo">046</span> extends AbstractStateMachineTableProcedure<ReopenTableRegionsState> {<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span> private static final Logger LOG = LoggerFactory.getLogger(ReopenTableRegionsProcedure.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span> private TableName tableName;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> private List<HRegionLocation> regions = Collections.emptyList();<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span> private int attempt;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span> public ReopenTableRegionsProcedure() {<a name="line.56"></a>
-<span class="sourceLineNo">057</span> }<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span> public ReopenTableRegionsProcedure(TableName tableName) {<a name="line.59"></a>
-<span class="sourceLineNo">060</span> this.tableName = tableName;<a name="line.60"></a>
-<span class="sourceLineNo">061</span> }<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span> @Override<a name="line.63"></a>
-<span class="sourceLineNo">064</span> public TableName getTableName() {<a name="line.64"></a>
-<span class="sourceLineNo">065</span> return tableName;<a name="line.65"></a>
-<span class="sourceLineNo">066</span> }<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span> @Override<a name="line.68"></a>
-<span class="sourceLineNo">069</span> public TableOperationType getTableOperationType() {<a name="line.69"></a>
-<span class="sourceLineNo">070</span> return TableOperationType.REGION_EDIT;<a name="line.70"></a>
-<span class="sourceLineNo">071</span> }<a name="line.71"></a>
-<span class="sourceLineNo">072</span><a name="line.72"></a>
-<span class="sourceLineNo">073</span> private boolean canSchedule(MasterProcedureEnv env, HRegionLocation loc) {<a name="line.73"></a>
-<span class="sourceLineNo">074</span> if (loc.getSeqNum() < 0) {<a name="line.74"></a>
-<span class="sourceLineNo">075</span> return false;<a name="line.75"></a>
-<span class="sourceLineNo">076</span> }<a name="line.76"></a>
-<span class="sourceLineNo">077</span> RegionStateNode regionNode =<a name="line.77"></a>
-<span class="sourceLineNo">078</span> env.getAssignmentManager().getRegionStates().getRegionStateNode(loc.getRegion());<a name="line.78"></a>
-<span class="sourceLineNo">079</span> // If the region node is null, then at least in the next round we can remove this region to make<a name="line.79"></a>
-<span class="sourceLineNo">080</span> // progress. And the second condition is a normal one, if there are no TRSP with it then we can<a name="line.80"></a>
-<span class="sourceLineNo">081</span> // schedule one to make progress.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> return regionNode == null || !regionNode.isInTransition();<a name="line.82"></a>
-<span class="sourceLineNo">083</span> }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span> @Override<a name="line.85"></a>
-<span class="sourceLineNo">086</span> protected Flow executeFromState(MasterProcedureEnv env, ReopenTableRegionsState state)<a name="line.86"></a>
-<span class="sourceLineNo">087</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.87"></a>
-<span class="sourceLineNo">088</span> switch (state) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span> case REOPEN_TABLE_REGIONS_GET_REGIONS:<a name="line.89"></a>
-<span class="sourceLineNo">090</span> if (!env.getAssignmentManager().isTableEnabled(tableName)) {<a name="line.90"></a>
-<span class="sourceLineNo">091</span> LOG.info("Table {} is disabled, give up reopening its regions", tableName);<a name="line.91"></a>
-<span class="sourceLineNo">092</span> return Flow.NO_MORE_STATE;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> }<a name="line.93"></a>
-<span class="sourceLineNo">094</span> regions =<a name="line.94"></a>
-<span class="sourceLineNo">095</span> env.getAssignmentManager().getRegionStates().getRegionsOfTableForReopen(tableName);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> setNextState(ReopenTableRegionsState.REOPEN_TABLE_REGIONS_REOPEN_REGIONS);<a name="line.96"></a>
-<span class="sourceLineNo">097</span> return Flow.HAS_MORE_STATE;<a name="line.97"></a>
-<span class="sourceLineNo">098</span> case REOPEN_TABLE_REGIONS_REOPEN_REGIONS:<a name="line.98"></a>
-<span class="sourceLineNo">099</span> for (HRegionLocation loc : regions) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span> RegionStateNode regionNode =<a name="line.100"></a>
-<span class="sourceLineNo">101</span> env.getAssignmentManager().getRegionStates().getRegionStateNode(loc.getRegion());<a name="line.101"></a>
-<span class="sourceLineNo">102</span> // this possible, maybe the region has already been merged or split, see HBASE-20921<a name="line.102"></a>
-<span class="sourceLineNo">103</span> if (regionNode == null) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span> continue;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> }<a name="line.105"></a>
-<span class="sourceLineNo">106</span> TransitRegionStateProcedure proc;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> regionNode.lock();<a name="line.107"></a>
-<span class="sourceLineNo">108</span> try {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> if (regionNode.getProcedure() != null) {<a name="line.109"></a>
-<span class="sourceLineNo">110</span> continue;<a name="line.110"></a>
-<span class="sourceLineNo">111</span> }<a name="line.111"></a>
-<span class="sourceLineNo">112</span> proc = TransitRegionStateProcedure.reopen(env, regionNode.getRegionInfo());<a name="line.112"></a>
-<span class="sourceLineNo">113</span> regionNode.setProcedure(proc);<a name="line.113"></a>
-<span class="sourceLineNo">114</span> } finally {<a name="line.114"></a>
-<span class="sourceLineNo">115</span> regionNode.unlock();<a name="line.115"></a>
-<span class="sourceLineNo">116</span> }<a name="line.116"></a>
-<span class="sourceLineNo">117</span> addChildProcedure(proc);<a name="line.117"></a>
-<span class="sourceLineNo">118</span> }<a name="line.118"></a>
-<span class="sourceLineNo">119</span> setNextState(ReopenTableRegionsState.REOPEN_TABLE_REGIONS_CONFIRM_REOPENED);<a name="line.119"></a>
-<span class="sourceLineNo">120</span> return Flow.HAS_MORE_STATE;<a name="line.120"></a>
-<span class="sourceLineNo">121</span> case REOPEN_TABLE_REGIONS_CONFIRM_REOPENED:<a name="line.121"></a>
-<span class="sourceLineNo">122</span> regions = regions.stream().map(env.getAssignmentManager().getRegionStates()::checkReopened)<a name="line.122"></a>
-<span class="sourceLineNo">123</span> .filter(l -> l != null).collect(Collectors.toList());<a name="line.123"></a>
-<span class="sourceLineNo">124</span> if (regions.isEmpty()) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> return Flow.NO_MORE_STATE;<a name="line.125"></a>
-<span class="sourceLineNo">126</span> }<a name="line.126"></a>
-<span class="sourceLineNo">127</span> if (regions.stream().anyMatch(loc -> canSchedule(env, loc))) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span> attempt = 0;<a name="line.128"></a>
-<span class="sourceLineNo">129</span> setNextState(ReopenTableRegionsState.REOPEN_TABLE_REGIONS_REOPEN_REGIONS);<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return Flow.HAS_MORE_STATE;<a name="line.130"></a>
-<span class="sourceLineNo">131</span> }<a name="line.131"></a>
-<span class="sourceLineNo">132</span> // We can not schedule TRSP for all the regions need to reopen, wait for a while and retry<a name="line.132"></a>
-<span class="sourceLineNo">133</span> // again.<a name="line.133"></a>
-<span class="sourceLineNo">134</span> long backoff = ProcedureUtil.getBackoffTimeMs(this.attempt++);<a name="line.134"></a>
-<span class="sourceLineNo">135</span> LOG.info(<a name="line.135"></a>
-<span class="sourceLineNo">136</span> "There are still {} region(s) which need to be reopened for table {} are in " +<a name="line.136"></a>
-<span class="sourceLineNo">137</span> "OPENING state, suspend {}secs and try again later",<a name="line.137"></a>
-<span class="sourceLineNo">138</span> regions.size(), tableName, backoff / 1000);<a name="line.138"></a>
-<span class="sourceLineNo">139</span> setTimeout(Math.toIntExact(backoff));<a name="line.139"></a>
-<span class="sourceLineNo">140</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.140"></a>
-<span class="sourceLineNo">141</span> skipPersistence();<a name="line.141"></a>
-<span class="sourceLineNo">142</span> throw new ProcedureSuspendedException();<a name="line.142"></a>
-<span class="sourceLineNo">143</span> default:<a name="line.143"></a>
-<span class="sourceLineNo">144</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.144"></a>
-<span class="sourceLineNo">145</span> }<a name="line.145"></a>
-<span class="sourceLineNo">146</span> }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span> /**<a name="line.148"></a>
-<span class="sourceLineNo">149</span> * At end of timeout, wake ourselves up so we run again.<a name="line.149"></a>
-<span class="sourceLineNo">150</span> */<a name="line.150"></a>
-<span class="sourceLineNo">151</span> @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.153"></a>
-<span class="sourceLineNo">154</span> env.getProcedureScheduler().addFront(this);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> return false; // 'false' means that this procedure handled the timeout<a name="line.155"></a>
-<span class="sourceLineNo">156</span> }<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span> @Override<a name="line.158"></a>
-<span class="sourceLineNo">159</span> protected void rollbackState(MasterProcedureEnv env, ReopenTableRegionsState state)<a name="line.159"></a>
-<span class="sourceLineNo">160</span> throws IOException, InterruptedException {<a name="line.160"></a>
-<span class="sourceLineNo">161</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.161"></a>
-<span class="sourceLineNo">162</span> }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span> @Override<a name="line.164"></a>
-<span class="sourceLineNo">165</span> protected ReopenTableRegionsState getState(int stateId) {<a name="line.165"></a>
-<span class="sourceLineNo">166</span> return ReopenTableRegionsState.forNumber(stateId);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> @Override<a name="line.169"></a>
-<span class="sourceLineNo">170</span> protected int getStateId(ReopenTableRegionsState state) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> return state.getNumber();<a name="line.171"></a>
-<span class="sourceLineNo">172</span> }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span> @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span> protected ReopenTableRegionsState getInitialState() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span> return ReopenTableRegionsState.REOPEN_TABLE_REGIONS_GET_REGIONS;<a name="line.176"></a>
-<span class="sourceLineNo">177</span> }<a name="line.177"></a>
-<span class="sourceLineNo">178</span><a name="line.178"></a>
-<span class="sourceLineNo">179</span> @Override<a name="line.179"></a>
-<span class="sourceLineNo">180</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.180"></a>
-<span class="sourceLineNo">181</span> super.serializeStateData(serializer);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> ReopenTableRegionsStateData.Builder builder = ReopenTableRegionsStateData.newBuilder()<a name="line.182"></a>
-<span class="sourceLineNo">183</span> .setTableName(ProtobufUtil.toProtoTableName(tableName));<a name="line.183"></a>
-<span class="sourceLineNo">184</span> regions.stream().map(ProtobufUtil::toRegionLocation).forEachOrdered(builder::addRegion);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> serializer.serialize(builder.build());<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> super.deserializeStateData(serializer);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> ReopenTableRegionsStateData data = serializer.deserialize(ReopenTableRegionsStateData.class);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> tableName = ProtobufUtil.toTableName(data.getTableName());<a name="line.192"></a>
-<span class="sourceLineNo">193</span> regions = data.getRegionList().stream().map(ProtobufUtil::toRegionLocation)<a name="line.193"></a>
-<span class="sourceLineNo">194</span> .collect(Collectors.toList());<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>}<a name="line.196"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.slf4j.Logger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.slf4j.LoggerFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsState;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.ReopenTableRegionsStateData;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * Used for reopening the regions for a table.<a name="line.43"></a>
+<span class="sourceLineNo">044</span> */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>@InterfaceAudience.Private<a name="line.45"></a>
+<span class="sourceLineNo">046</span>public class ReopenTableRegionsProcedure<a name="line.46"></a>
+<span class="sourceLineNo">047</span> extends AbstractStateMachineTableProcedure<ReopenTableRegionsState> {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span> private static final Logger LOG = LoggerFactory.getLogger(ReopenTableRegionsProcedure.class);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span> private TableName tableName;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span> private List<HRegionLocation> regions = Collections.emptyList();<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span> private RetryCounter retryCounter;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span> public ReopenTableRegionsProcedure() {<a name="line.57"></a>
+<span class="sourceLineNo">058</span> }<a name="line.58"></a>
+<span class="sourceLineNo">059</span><a name="line.59"></a>
+<span class="sourceLineNo">060</span> public ReopenTableRegionsProcedure(TableName tableName) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> this.tableName = tableName;<a name="line.61"></a>
+<span class="sourceLineNo">062</span> }<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span> @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span> public TableName getTableName() {<a name="line.65"></a>
+<span class="sourceLineNo">066</span> return tableName;<a name="line.66"></a>
+<span class="sourceLineNo">067</span> }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span> @Override<a name="line.69"></a>
+<span class="sourceLineNo">070</span> public TableOperationType getTableOperationType() {<a name="line.70"></a>
+<span class="sourceLineNo">071</span> return TableOperationType.REGION_EDIT;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> }<a name="line.72"></a>
+<span class="sourceLineNo">073</span><a name="line.73"></a>
+<span class="sourceLineNo">074</span> private boolean canSchedule(MasterProcedureEnv env, HRegionLocation loc) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span> if (loc.getSeqNum() < 0) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span> return false;<a name="line.76"></a>
+<span class="sourceLineNo">077</span> }<a name="line.77"></a>
+<span class="sourceLineNo">078</span> RegionStateNode regionNode =<a name="line.78"></a>
+<span class="sourceLineNo">079</span> env.getAssignmentManager().getRegionStates().getRegionStateNode(loc.getRegion());<a name="line.79"></a>
+<span class="sourceLineNo">080</span> // If the region node is null, then at least in the next round we can remove this region to make<a name="line.80"></a>
+<span class="sourceLineNo">081</span> // progress. And the second condition is a normal one, if there are no TRSP with it then we can<a name="line.81"></a>
+<span class="sourceLineNo">082</span> // schedule one to make progress.<a name="line.82"></a>
+<span class="sourceLineNo">083</span> return regionNode == null || !regionNode.isInTransition();<a name="line.83"></a>
+<span class="sourceLineNo">084</span> }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span> @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span> protected Flow executeFromState(MasterProcedureEnv env, ReopenTableRegionsState state)<a name="line.87"></a>
+<span class="sourceLineNo">088</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.88"></a>
+<span class="sourceLineNo">089</span> switch (state) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> case REOPEN_TABLE_REGIONS_GET_REGIONS:<a name="line.90"></a>
+<span class="sourceLineNo">091</span> if (!env.getAssignmentManager().isTableEnabled(tableName)) {<a name="line.91"></a>
+<span class="sourceLineNo">092</span> LOG.info("Table {} is disabled, give up reopening its regions", tableName);<a name="line.92"></a>
+<span class="sourceLineNo">093</span> return Flow.NO_MORE_STATE;<a name="line.93"></a>
+<span class="sourceLineNo">094</span> }<a name="line.94"></a>
+<span class="sourceLineNo">095</span> regions =<a name="line.95"></a>
+<span class="sourceLineNo">096</span> env.getAssignmentManager().getRegionStates().getRegionsOfTableForReopen(tableName);<a name="line.96"></a>
+<span class="sourceLineNo">097</span> setNextState(ReopenTableRegionsState.REOPEN_TABLE_REGIONS_REOPEN_REGIONS);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> return Flow.HAS_MORE_STATE;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> case REOPEN_TABLE_REGIONS_REOPEN_REGIONS:<a name="line.99"></a>
+<span class="sourceLineNo">100</span> for (HRegionLocation loc : regions) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span> RegionStateNode regionNode =<a name="line.101"></a>
+<span class="sourceLineNo">102</span> env.getAssignmentManager().getRegionStates().getRegionStateNode(loc.getRegion());<a name="line.102"></a>
+<span class="sourceLineNo">103</span> // this possible, maybe the region has already been merged or split, see HBASE-20921<a name="line.103"></a>
+<span class="sourceLineNo">104</span> if (regionNode == null) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> continue;<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span> TransitRegionStateProcedure proc;<a name="line.107"></a>
+<span class="sourceLineNo">108</span> regionNode.lock();<a name="line.108"></a>
+<span class="sourceLineNo">109</span> try {<a name="line.109"></a>
+<span class="sourceLineNo">110</span> if (regionNode.getProcedure() != null) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span> continue;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> }<a name="line.112"></a>
+<span class="sourceLineNo">113</span> proc = TransitRegionStateProcedure.reopen(env, regionNode.getRegionInfo());<a name="line.113"></a>
+<span class="sourceLineNo">114</span> regionNode.setProcedure(proc);<a name="line.114"></a>
+<span class="sourceLineNo">115</span> } finally {<a name="line.115"></a>
+<span class="sourceLineNo">116</span> regionNode.unlock();<a name="line.116"></a>
+<span class="sourceLineNo">117</span> }<a name="line.117"></a>
+<span class="sourceLineNo">118</span> addChildProcedure(proc);<a name="line.118"></a>
+<span class="sourceLineNo">119</span> }<a name="line.119"></a>
+<span class="sourceLineNo">120</span> setNextState(ReopenTableRegionsState.REOPEN_TABLE_REGIONS_CONFIRM_REOPENED);<a name="line.120"></a>
+<span class="sourceLineNo">121</span> return Flow.HAS_MORE_STATE;<a name="line.121"></a>
+<span class="sourceLineNo">122</span> case REOPEN_TABLE_REGIONS_CONFIRM_REOPENED:<a name="line.122"></a>
+<span class="sourceLineNo">123</span> regions = regions.stream().map(env.getAssignmentManager().getRegionStates()::checkReopened)<a name="line.123"></a>
+<span class="sourceLineNo">124</span> .filter(l -> l != null).collect(Collectors.toList());<a name="line.124"></a>
+<span class="sourceLineNo">125</span> if (regions.isEmpty()) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span> return Flow.NO_MORE_STATE;<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span> if (regions.stream().anyMatch(loc -> canSchedule(env, loc))) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> retryCounter = null;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> setNextState(ReopenTableRegionsState.REOPEN_TABLE_REGIONS_REOPEN_REGIONS);<a name="line.130"></a>
+<span class="sourceLineNo">131</span> return Flow.HAS_MORE_STATE;<a name="line.131"></a>
+<span class="sourceLineNo">132</span> }<a name="line.132"></a>
+<span class="sourceLineNo">133</span> // We can not schedule TRSP for all the regions need to reopen, wait for a while and retry<a name="line.133"></a>
+<span class="sourceLineNo">134</span> // again.<a name="line.134"></a>
+<span class="sourceLineNo">135</span> if (retryCounter == null) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span> retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.138"></a>
+<span class="sourceLineNo">139</span> LOG.info(<a name="line.139"></a>
+<span class="sourceLineNo">140</span> "There are still {} region(s) which need to be reopened for table {} are in " +<a name="line.140"></a>
+<span class="sourceLineNo">141</span> "OPENING state, suspend {}secs and try again later",<a name="line.141"></a>
+<span class="sourceLineNo">142</span> regions.size(), tableName, backoff / 1000);<a name="line.142"></a>
+<span class="sourceLineNo">143</span> setTimeout(Math.toIntExact(backoff));<a name="line.143"></a>
+<span class="sourceLineNo">144</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.144"></a>
+<span class="sourceLineNo">145</span> skipPersistence();<a name="line.145"></a>
+<span class="sourceLineNo">146</span> throw new ProcedureSuspendedException();<a name="line.146"></a>
+<span class="sourceLineNo">147</span> default:<a name="line.147"></a>
+<span class="sourceLineNo">148</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.148"></a>
+<span class="sourceLineNo">149</span> }<a name="line.149"></a>
+<span class="sourceLineNo">150</span> }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span> /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span> * At end of timeout, wake ourselves up so we run again.<a name="line.153"></a>
+<span class="sourceLineNo">154</span> */<a name="line.154"></a>
+<span class="sourceLineNo">155</span> @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.157"></a>
+<span class="sourceLineNo">158</span> env.getProcedureScheduler().addFront(this);<a name="line.158"></a>
+<span class="sourceLineNo">159</span> return false; // 'false' means that this procedure handled the timeout<a name="line.159"></a>
+<span class="sourceLineNo">160</span> }<a name="line.160"></a>
+<span class="sourceLineNo">161</span><a name="line.161"></a>
+<span class="sourceLineNo">162</span> @Override<a name="line.162"></a>
+<span class="sourceLineNo">163</span> protected void rollbackState(MasterProcedureEnv env, ReopenTableRegionsState state)<a name="line.163"></a>
+<span class="sourceLineNo">164</span> throws IOException, InterruptedException {<a name="line.164"></a>
+<span class="sourceLineNo">165</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.165"></a>
+<span class="sourceLineNo">166</span> }<a name="line.166"></a>
+<span class="sourceLineNo">167</span><a name="line.167"></a>
+<span class="sourceLineNo">168</span> @Override<a name="line.168"></a>
+<span class="sourceLineNo">169</span> protected ReopenTableRegionsState getState(int stateId) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> return ReopenTableRegionsState.forNumber(stateId);<a name="line.170"></a>
+<span class="sourceLineNo">171</span> }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span> @Override<a name="line.173"></a>
+<span class="sourceLineNo">174</span> protected int getStateId(ReopenTableRegionsState state) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span> return state.getNumber();<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span><a name="line.177"></a>
+<span class="sourceLineNo">178</span> @Override<a name="line.178"></a>
+<span class="sourceLineNo">179</span> protected ReopenTableRegionsState getInitialState() {<a name="line.179"></a>
+<span class="sourceLineNo">180</span> return ReopenTableRegionsState.REOPEN_TABLE_REGIONS_GET_REGIONS;<a name="line.180"></a>
+<span class="sourceLineNo">181</span> }<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span> @Override<a name="line.183"></a>
+<span class="sourceLineNo">184</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.184"></a>
+<span class="sourceLineNo">185</span> super.serializeStateData(serializer);<a name="line.185"></a>
+<span class="sourceLineNo">186</span> ReopenTableRegionsStateData.Builder builder = ReopenTableRegionsStateData.newBuilder()<a name="line.186"></a>
+<span class="sourceLineNo">187</span> .setTableName(ProtobufUtil.toProtoTableName(tableName));<a name="line.187"></a>
+<span class="sourceLineNo">188</span> regions.stream().map(ProtobufUtil::toRegionLocation).forEachOrdered(builder::addRegion);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> serializer.serialize(builder.build());<a name="line.189"></a>
+<span class="sourceLineNo">190</span> }<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span> @Override<a name="line.192"></a>
+<span class="sourceLineNo">193</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.193"></a>
+<span class="sourceLineNo">194</span> super.deserializeStateData(serializer);<a name="line.194"></a>
+<span class="sourceLineNo">195</span> ReopenTableRegionsStateData data = serializer.deserialize(ReopenTableRegionsStateData.class);<a name="line.195"></a>
+<span class="sourceLineNo">196</span> tableName = ProtobufUtil.toTableName(data.getTableName());<a name="line.196"></a>
+<span class="sourceLineNo">197</span> regions = data.getRegionList().stream().map(ProtobufUtil::toRegionLocation)<a name="line.197"></a>
+<span class="sourceLineNo">198</span> .collect(Collectors.toList());<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>}<a name="line.200"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html
index b3d020a..a82ec99 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SplitWALProcedure.html
@@ -36,176 +36,173 @@
<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.StateMachineProcedure;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.slf4j.Logger;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.slf4j.LoggerFactory;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * The procedure is to split a WAL. It will get an available region server and<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * schedule a {@link SplitWALRemoteProcedure} to actually send the request to region<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * server to split this WAL.<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * It also check if the split wal task really succeed. If the WAL still exists, it will<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * schedule another region server to split this WAL.<a name="line.46"></a>
-<span class="sourceLineNo">047</span> */<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public class SplitWALProcedure<a name="line.49"></a>
-<span class="sourceLineNo">050</span> extends StateMachineProcedure<MasterProcedureEnv, MasterProcedureProtos.SplitWALState><a name="line.50"></a>
-<span class="sourceLineNo">051</span> implements ServerProcedureInterface {<a name="line.51"></a>
-<span class="sourceLineNo">052</span> private static final Logger LOG = LoggerFactory.getLogger(SplitWALProcedure.class);<a name="line.52"></a>
-<span class="sourceLineNo">053</span> private String walPath;<a name="line.53"></a>
-<span class="sourceLineNo">054</span> private ServerName worker;<a name="line.54"></a>
-<span class="sourceLineNo">055</span> private ServerName crashedServer;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> private int attempts = 0;<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span> public SplitWALProcedure() {<a name="line.58"></a>
-<span class="sourceLineNo">059</span> }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span> public SplitWALProcedure(String walPath, ServerName crashedServer) {<a name="line.61"></a>
-<span class="sourceLineNo">062</span> this.walPath = walPath;<a name="line.62"></a>
-<span class="sourceLineNo">063</span> this.crashedServer = crashedServer;<a name="line.63"></a>
-<span class="sourceLineNo">064</span> }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span> @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span> protected Flow executeFromState(MasterProcedureEnv env, MasterProcedureProtos.SplitWALState state)<a name="line.67"></a>
-<span class="sourceLineNo">068</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.68"></a>
-<span class="sourceLineNo">069</span> SplitWALManager splitWALManager = env.getMasterServices().getSplitWALManager();<a name="line.69"></a>
-<span class="sourceLineNo">070</span> switch (state) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span> case ACQUIRE_SPLIT_WAL_WORKER:<a name="line.71"></a>
-<span class="sourceLineNo">072</span> worker = splitWALManager.acquireSplitWALWorker(this);<a name="line.72"></a>
-<span class="sourceLineNo">073</span> setNextState(MasterProcedureProtos.SplitWALState.DISPATCH_WAL_TO_WORKER);<a name="line.73"></a>
-<span class="sourceLineNo">074</span> return Flow.HAS_MORE_STATE;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> case DISPATCH_WAL_TO_WORKER:<a name="line.75"></a>
-<span class="sourceLineNo">076</span> assert worker != null;<a name="line.76"></a>
-<span class="sourceLineNo">077</span> addChildProcedure(new SplitWALRemoteProcedure(worker, crashedServer, walPath));<a name="line.77"></a>
-<span class="sourceLineNo">078</span> setNextState(MasterProcedureProtos.SplitWALState.RELEASE_SPLIT_WORKER);<a name="line.78"></a>
-<span class="sourceLineNo">079</span> return Flow.HAS_MORE_STATE;<a name="line.79"></a>
-<span class="sourceLineNo">080</span> case RELEASE_SPLIT_WORKER:<a name="line.80"></a>
-<span class="sourceLineNo">081</span> boolean finished;<a name="line.81"></a>
-<span class="sourceLineNo">082</span> try {<a name="line.82"></a>
-<span class="sourceLineNo">083</span> finished = splitWALManager.isSplitWALFinished(walPath);<a name="line.83"></a>
-<span class="sourceLineNo">084</span> } catch (IOException ioe) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts++);<a name="line.85"></a>
-<span class="sourceLineNo">086</span> LOG.warn(<a name="line.86"></a>
-<span class="sourceLineNo">087</span> "Failed to check whether splitting wal {} success, wait {} seconds to retry",<a name="line.87"></a>
-<span class="sourceLineNo">088</span> walPath, backoff / 1000, ioe);<a name="line.88"></a>
-<span class="sourceLineNo">089</span> throw suspend(backoff);<a name="line.89"></a>
-<span class="sourceLineNo">090</span> }<a name="line.90"></a>
-<span class="sourceLineNo">091</span> splitWALManager.releaseSplitWALWorker(worker, env.getProcedureScheduler());<a name="line.91"></a>
-<span class="sourceLineNo">092</span> if (!finished) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span> LOG.warn("Failed to split wal {} by server {}, retry...", walPath, worker);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> setNextState(MasterProcedureProtos.SplitWALState.ACQUIRE_SPLIT_WAL_WORKER);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> return Flow.HAS_MORE_STATE;<a name="line.95"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.slf4j.Logger;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.slf4j.LoggerFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * The procedure is to split a WAL. It will get an available region server and<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * schedule a {@link SplitWALRemoteProcedure} to actually send the request to region<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * server to split this WAL.<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * It also check if the split wal task really succeed. If the WAL still exists, it will<a name="line.46"></a>
+<span class="sourceLineNo">047</span> * schedule another region server to split this WAL.<a name="line.47"></a>
+<span class="sourceLineNo">048</span> */<a name="line.48"></a>
+<span class="sourceLineNo">049</span>@InterfaceAudience.Private<a name="line.49"></a>
+<span class="sourceLineNo">050</span>public class SplitWALProcedure<a name="line.50"></a>
+<span class="sourceLineNo">051</span> extends StateMachineProcedure<MasterProcedureEnv, MasterProcedureProtos.SplitWALState><a name="line.51"></a>
+<span class="sourceLineNo">052</span> implements ServerProcedureInterface {<a name="line.52"></a>
+<span class="sourceLineNo">053</span> private static final Logger LOG = LoggerFactory.getLogger(SplitWALProcedure.class);<a name="line.53"></a>
+<span class="sourceLineNo">054</span> private String walPath;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> private ServerName worker;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> private ServerName crashedServer;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> private RetryCounter retryCounter;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span> public SplitWALProcedure() {<a name="line.59"></a>
+<span class="sourceLineNo">060</span> }<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span> public SplitWALProcedure(String walPath, ServerName crashedServer) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span> this.walPath = walPath;<a name="line.63"></a>
+<span class="sourceLineNo">064</span> this.crashedServer = crashedServer;<a name="line.64"></a>
+<span class="sourceLineNo">065</span> }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span> @Override<a name="line.67"></a>
+<span class="sourceLineNo">068</span> protected Flow executeFromState(MasterProcedureEnv env, MasterProcedureProtos.SplitWALState state)<a name="line.68"></a>
+<span class="sourceLineNo">069</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.69"></a>
+<span class="sourceLineNo">070</span> SplitWALManager splitWALManager = env.getMasterServices().getSplitWALManager();<a name="line.70"></a>
+<span class="sourceLineNo">071</span> switch (state) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span> case ACQUIRE_SPLIT_WAL_WORKER:<a name="line.72"></a>
+<span class="sourceLineNo">073</span> worker = splitWALManager.acquireSplitWALWorker(this);<a name="line.73"></a>
+<span class="sourceLineNo">074</span> setNextState(MasterProcedureProtos.SplitWALState.DISPATCH_WAL_TO_WORKER);<a name="line.74"></a>
+<span class="sourceLineNo">075</span> return Flow.HAS_MORE_STATE;<a name="line.75"></a>
+<span class="sourceLineNo">076</span> case DISPATCH_WAL_TO_WORKER:<a name="line.76"></a>
+<span class="sourceLineNo">077</span> assert worker != null;<a name="line.77"></a>
+<span class="sourceLineNo">078</span> addChildProcedure(new SplitWALRemoteProcedure(worker, crashedServer, walPath));<a name="line.78"></a>
+<span class="sourceLineNo">079</span> setNextState(MasterProcedureProtos.SplitWALState.RELEASE_SPLIT_WORKER);<a name="line.79"></a>
+<span class="sourceLineNo">080</span> return Flow.HAS_MORE_STATE;<a name="line.80"></a>
+<span class="sourceLineNo">081</span> case RELEASE_SPLIT_WORKER:<a name="line.81"></a>
+<span class="sourceLineNo">082</span> boolean finished;<a name="line.82"></a>
+<span class="sourceLineNo">083</span> try {<a name="line.83"></a>
+<span class="sourceLineNo">084</span> finished = splitWALManager.isSplitWALFinished(walPath);<a name="line.84"></a>
+<span class="sourceLineNo">085</span> } catch (IOException ioe) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span> if (retryCounter == null) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span> retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());<a name="line.87"></a>
+<span class="sourceLineNo">088</span> }<a name="line.88"></a>
+<span class="sourceLineNo">089</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.89"></a>
+<span class="sourceLineNo">090</span> LOG.warn("Failed to check whether splitting wal {} success, wait {} seconds to retry",<a name="line.90"></a>
+<span class="sourceLineNo">091</span> walPath, backoff / 1000, ioe);<a name="line.91"></a>
+<span class="sourceLineNo">092</span> setTimeout(Math.toIntExact(backoff));<a name="line.92"></a>
+<span class="sourceLineNo">093</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.93"></a>
+<span class="sourceLineNo">094</span> skipPersistence();<a name="line.94"></a>
+<span class="sourceLineNo">095</span> throw new ProcedureSuspendedException();<a name="line.95"></a>
<span class="sourceLineNo">096</span> }<a name="line.96"></a>
-<span class="sourceLineNo">097</span> ServerCrashProcedure.updateProgress(env, getParentProcId());<a name="line.97"></a>
-<span class="sourceLineNo">098</span> return Flow.NO_MORE_STATE;<a name="line.98"></a>
-<span class="sourceLineNo">099</span> default:<a name="line.99"></a>
-<span class="sourceLineNo">100</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.100"></a>
-<span class="sourceLineNo">101</span> }<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span> @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span> protected void rollbackState(MasterProcedureEnv env,<a name="line.105"></a>
-<span class="sourceLineNo">106</span> MasterProcedureProtos.SplitWALState splitOneWalState)<a name="line.106"></a>
-<span class="sourceLineNo">107</span> throws IOException, InterruptedException {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> if (splitOneWalState == getInitialState()) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> return;<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span> throw new UnsupportedOperationException();<a name="line.111"></a>
-<span class="sourceLineNo">112</span> }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span> @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span> protected MasterProcedureProtos.SplitWALState getState(int stateId) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span> return MasterProcedureProtos.SplitWALState.forNumber(stateId);<a name="line.116"></a>
-<span class="sourceLineNo">117</span> }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span> @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span> protected int getStateId(MasterProcedureProtos.SplitWALState state) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span> return state.getNumber();<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span> @Override<a name="line.124"></a>
-<span class="sourceLineNo">125</span> protected MasterProcedureProtos.SplitWALState getInitialState() {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> return MasterProcedureProtos.SplitWALState.ACQUIRE_SPLIT_WAL_WORKER;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> super.serializeStateData(serializer);<a name="line.131"></a>
-<span class="sourceLineNo">132</span> MasterProcedureProtos.SplitWALData.Builder builder =<a name="line.132"></a>
-<span class="sourceLineNo">133</span> MasterProcedureProtos.SplitWALData.newBuilder();<a name="line.133"></a>
-<span class="sourceLineNo">134</span> builder.setWalPath(walPath).setCrashedServer(ProtobufUtil.toServerName(crashedServer));<a name="line.134"></a>
-<span class="sourceLineNo">135</span> if (worker != null) {<a name="line.135"></a>
-<span class="sourceLineNo">136</span> builder.setWorker(ProtobufUtil.toServerName(worker));<a name="line.136"></a>
-<span class="sourceLineNo">137</span> }<a name="line.137"></a>
-<span class="sourceLineNo">138</span> serializer.serialize(builder.build());<a name="line.138"></a>
-<span class="sourceLineNo">139</span> }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span> @Override<a name="line.141"></a>
-<span class="sourceLineNo">142</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.142"></a>
-<span class="sourceLineNo">143</span> super.deserializeStateData(serializer);<a name="line.143"></a>
-<span class="sourceLineNo">144</span> MasterProcedureProtos.SplitWALData data =<a name="line.144"></a>
-<span class="sourceLineNo">145</span> serializer.deserialize(MasterProcedureProtos.SplitWALData.class);<a name="line.145"></a>
-<span class="sourceLineNo">146</span> walPath = data.getWalPath();<a name="line.146"></a>
-<span class="sourceLineNo">147</span> crashedServer = ProtobufUtil.toServerName(data.getCrashedServer());<a name="line.147"></a>
-<span class="sourceLineNo">148</span> if (data.hasWorker()) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span> worker = ProtobufUtil.toServerName(data.getWorker());<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span> }<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span> @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.155"></a>
-<span class="sourceLineNo">156</span> env.getProcedureScheduler().addFront(this);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> return false;<a name="line.157"></a>
-<span class="sourceLineNo">158</span> }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span> protected final ProcedureSuspendedException suspend(long backoff)<a name="line.160"></a>
-<span class="sourceLineNo">161</span> throws ProcedureSuspendedException {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> attempts++;<a name="line.162"></a>
-<span class="sourceLineNo">163</span> setTimeout(Math.toIntExact(backoff));<a name="line.163"></a>
-<span class="sourceLineNo">164</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> skipPersistence();<a name="line.165"></a>
-<span class="sourceLineNo">166</span> throw new ProcedureSuspendedException();<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> public String getWAL() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> return walPath;<a name="line.170"></a>
-<span class="sourceLineNo">171</span> }<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span> @VisibleForTesting<a name="line.173"></a>
-<span class="sourceLineNo">174</span> public ServerName getWorker(){<a name="line.174"></a>
-<span class="sourceLineNo">175</span> return worker;<a name="line.175"></a>
-<span class="sourceLineNo">176</span> }<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span> @Override<a name="line.178"></a>
-<span class="sourceLineNo">179</span> public ServerName getServerName() {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> return this.crashedServer;<a name="line.180"></a>
-<span class="sourceLineNo">181</span> }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span> @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span> public boolean hasMetaTableRegion() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span> return AbstractFSWALProvider.isMetaFile(new Path(walPath));<a name="line.185"></a>
-<span class="sourceLineNo">186</span> }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span> @Override<a name="line.188"></a>
-<span class="sourceLineNo">189</span> public ServerOperationType getServerOperationType() {<a name="line.189"></a>
-<span class="sourceLineNo">190</span> return ServerOperationType.SPLIT_WAL;<a name="line.190"></a>
-<span class="sourceLineNo">191</span> }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span> @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span> protected void afterReplay(MasterProcedureEnv env){<a name="line.194"></a>
-<span class="sourceLineNo">195</span> if(worker != null){<a name="line.195"></a>
-<span class="sourceLineNo">196</span> env.getMasterServices().getSplitWALManager().addUsedSplitWALWorker(worker);<a name="line.196"></a>
-<span class="sourceLineNo">197</span> }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span> }<a name="line.199"></a>
-<span class="sourceLineNo">200</span>}<a name="line.200"></a>
+<span class="sourceLineNo">097</span> splitWALManager.releaseSplitWALWorker(worker, env.getProcedureScheduler());<a name="line.97"></a>
+<span class="sourceLineNo">098</span> if (!finished) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span> LOG.warn("Failed to split wal {} by server {}, retry...", walPath, worker);<a name="line.99"></a>
+<span class="sourceLineNo">100</span> setNextState(MasterProcedureProtos.SplitWALState.ACQUIRE_SPLIT_WAL_WORKER);<a name="line.100"></a>
+<span class="sourceLineNo">101</span> return Flow.HAS_MORE_STATE;<a name="line.101"></a>
+<span class="sourceLineNo">102</span> }<a name="line.102"></a>
+<span class="sourceLineNo">103</span> ServerCrashProcedure.updateProgress(env, getParentProcId());<a name="line.103"></a>
+<span class="sourceLineNo">104</span> return Flow.NO_MORE_STATE;<a name="line.104"></a>
+<span class="sourceLineNo">105</span> default:<a name="line.105"></a>
+<span class="sourceLineNo">106</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.106"></a>
+<span class="sourceLineNo">107</span> }<a name="line.107"></a>
+<span class="sourceLineNo">108</span> }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> @Override<a name="line.110"></a>
+<span class="sourceLineNo">111</span> protected void rollbackState(MasterProcedureEnv env,<a name="line.111"></a>
+<span class="sourceLineNo">112</span> MasterProcedureProtos.SplitWALState splitOneWalState)<a name="line.112"></a>
+<span class="sourceLineNo">113</span> throws IOException, InterruptedException {<a name="line.113"></a>
+<span class="sourceLineNo">114</span> if (splitOneWalState == getInitialState()) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span> return;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> }<a name="line.116"></a>
+<span class="sourceLineNo">117</span> throw new UnsupportedOperationException();<a name="line.117"></a>
+<span class="sourceLineNo">118</span> }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span> @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span> protected MasterProcedureProtos.SplitWALState getState(int stateId) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span> return MasterProcedureProtos.SplitWALState.forNumber(stateId);<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span> @Override<a name="line.125"></a>
+<span class="sourceLineNo">126</span> protected int getStateId(MasterProcedureProtos.SplitWALState state) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span> return state.getNumber();<a name="line.127"></a>
+<span class="sourceLineNo">128</span> }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span> @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span> protected MasterProcedureProtos.SplitWALState getInitialState() {<a name="line.131"></a>
+<span class="sourceLineNo">132</span> return MasterProcedureProtos.SplitWALState.ACQUIRE_SPLIT_WAL_WORKER;<a name="line.132"></a>
+<span class="sourceLineNo">133</span> }<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span> @Override<a name="line.135"></a>
+<span class="sourceLineNo">136</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.136"></a>
+<span class="sourceLineNo">137</span> super.serializeStateData(serializer);<a name="line.137"></a>
+<span class="sourceLineNo">138</span> MasterProcedureProtos.SplitWALData.Builder builder =<a name="line.138"></a>
+<span class="sourceLineNo">139</span> MasterProcedureProtos.SplitWALData.newBuilder();<a name="line.139"></a>
+<span class="sourceLineNo">140</span> builder.setWalPath(walPath).setCrashedServer(ProtobufUtil.toServerName(crashedServer));<a name="line.140"></a>
+<span class="sourceLineNo">141</span> if (worker != null) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span> builder.setWorker(ProtobufUtil.toServerName(worker));<a name="line.142"></a>
+<span class="sourceLineNo">143</span> }<a name="line.143"></a>
+<span class="sourceLineNo">144</span> serializer.serialize(builder.build());<a name="line.144"></a>
+<span class="sourceLineNo">145</span> }<a name="line.145"></a>
+<span class="sourceLineNo">146</span><a name="line.146"></a>
+<span class="sourceLineNo">147</span> @Override<a name="line.147"></a>
+<span class="sourceLineNo">148</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.148"></a>
+<span class="sourceLineNo">149</span> super.deserializeStateData(serializer);<a name="line.149"></a>
+<span class="sourceLineNo">150</span> MasterProcedureProtos.SplitWALData data =<a name="line.150"></a>
+<span class="sourceLineNo">151</span> serializer.deserialize(MasterProcedureProtos.SplitWALData.class);<a name="line.151"></a>
+<span class="sourceLineNo">152</span> walPath = data.getWalPath();<a name="line.152"></a>
+<span class="sourceLineNo">153</span> crashedServer = ProtobufUtil.toServerName(data.getCrashedServer());<a name="line.153"></a>
+<span class="sourceLineNo">154</span> if (data.hasWorker()) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span> worker = ProtobufUtil.toServerName(data.getWorker());<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span> }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span> @Override<a name="line.159"></a>
+<span class="sourceLineNo">160</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.161"></a>
+<span class="sourceLineNo">162</span> env.getProcedureScheduler().addFront(this);<a name="line.162"></a>
+<span class="sourceLineNo">163</span> return false;<a name="line.163"></a>
+<span class="sourceLineNo">164</span> }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span> public String getWAL() {<a name="line.166"></a>
+<span class="sourceLineNo">167</span> return walPath;<a name="line.167"></a>
+<span class="sourceLineNo">168</span> }<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span> @VisibleForTesting<a name="line.170"></a>
+<span class="sourceLineNo">171</span> public ServerName getWorker(){<a name="line.171"></a>
+<span class="sourceLineNo">172</span> return worker;<a name="line.172"></a>
+<span class="sourceLineNo">173</span> }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span> @Override<a name="line.175"></a>
+<span class="sourceLineNo">176</span> public ServerName getServerName() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span> return this.crashedServer;<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span> @Override<a name="line.180"></a>
+<span class="sourceLineNo">181</span> public boolean hasMetaTableRegion() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span> return AbstractFSWALProvider.isMetaFile(new Path(walPath));<a name="line.182"></a>
+<span class="sourceLineNo">183</span> }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span> @Override<a name="line.185"></a>
+<span class="sourceLineNo">186</span> public ServerOperationType getServerOperationType() {<a name="line.186"></a>
+<span class="sourceLineNo">187</span> return ServerOperationType.SPLIT_WAL;<a name="line.187"></a>
+<span class="sourceLineNo">188</span> }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span> @Override<a name="line.190"></a>
+<span class="sourceLineNo">191</span> protected void afterReplay(MasterProcedureEnv env){<a name="line.191"></a>
+<span class="sourceLineNo">192</span> if(worker != null){<a name="line.192"></a>
+<span class="sourceLineNo">193</span> env.getMasterServices().getSplitWALManager().addUsedSplitWALWorker(worker);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> }<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>}<a name="line.197"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html
index cca4273..9d79ced 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/procedure/SwitchRpcThrottleProcedure.html
@@ -33,143 +33,147 @@
<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.ProcedureYieldException;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.StateMachineProcedure;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.quotas.RpcThrottleStorage;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.Logger;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.slf4j.LoggerFactory;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleStateData;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>/**<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * The procedure to switch rpc throttle<a name="line.37"></a>
-<span class="sourceLineNo">038</span> */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
-<span class="sourceLineNo">040</span>public class SwitchRpcThrottleProcedure<a name="line.40"></a>
-<span class="sourceLineNo">041</span> extends StateMachineProcedure<MasterProcedureEnv, SwitchRpcThrottleState><a name="line.41"></a>
-<span class="sourceLineNo">042</span> implements ServerProcedureInterface {<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span> private static Logger LOG = LoggerFactory.getLogger(SwitchRpcThrottleProcedure.class);<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span> RpcThrottleStorage rpcThrottleStorage;<a name="line.46"></a>
-<span class="sourceLineNo">047</span> boolean rpcThrottleEnabled;<a name="line.47"></a>
-<span class="sourceLineNo">048</span> ProcedurePrepareLatch syncLatch;<a name="line.48"></a>
-<span class="sourceLineNo">049</span> ServerName serverName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span> int attempts;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> public SwitchRpcThrottleProcedure() {<a name="line.52"></a>
-<span class="sourceLineNo">053</span> }<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span> public SwitchRpcThrottleProcedure(RpcThrottleStorage rpcThrottleStorage,<a name="line.55"></a>
-<span class="sourceLineNo">056</span> boolean rpcThrottleEnabled, ServerName serverName, final ProcedurePrepareLatch syncLatch) {<a name="line.56"></a>
-<span class="sourceLineNo">057</span> this.rpcThrottleStorage = rpcThrottleStorage;<a name="line.57"></a>
-<span class="sourceLineNo">058</span> this.syncLatch = syncLatch;<a name="line.58"></a>
-<span class="sourceLineNo">059</span> this.rpcThrottleEnabled = rpcThrottleEnabled;<a name="line.59"></a>
-<span class="sourceLineNo">060</span> this.serverName = serverName;<a name="line.60"></a>
-<span class="sourceLineNo">061</span> }<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span> @Override<a name="line.63"></a>
-<span class="sourceLineNo">064</span> protected Flow executeFromState(MasterProcedureEnv env, SwitchRpcThrottleState state)<a name="line.64"></a>
-<span class="sourceLineNo">065</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.65"></a>
-<span class="sourceLineNo">066</span> switch (state) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span> case UPDATE_SWITCH_RPC_THROTTLE_STORAGE:<a name="line.67"></a>
-<span class="sourceLineNo">068</span> try {<a name="line.68"></a>
-<span class="sourceLineNo">069</span> switchThrottleState(env, rpcThrottleEnabled);<a name="line.69"></a>
-<span class="sourceLineNo">070</span> } catch (IOException e) {<a name="line.70"></a>
-<span class="sourceLineNo">071</span> long backoff = ProcedureUtil.getBackoffTimeMs(this.attempts++);<a name="line.71"></a>
-<span class="sourceLineNo">072</span> LOG.warn("Failed to store rpc throttle value {}, sleep {} secs and retry",<a name="line.72"></a>
-<span class="sourceLineNo">073</span> rpcThrottleEnabled, backoff / 1000, e);<a name="line.73"></a>
-<span class="sourceLineNo">074</span> setTimeout(Math.toIntExact(backoff));<a name="line.74"></a>
-<span class="sourceLineNo">075</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.75"></a>
-<span class="sourceLineNo">076</span> skipPersistence();<a name="line.76"></a>
-<span class="sourceLineNo">077</span> throw new ProcedureSuspendedException();<a name="line.77"></a>
-<span class="sourceLineNo">078</span> }<a name="line.78"></a>
-<span class="sourceLineNo">079</span> setNextState(SwitchRpcThrottleState.SWITCH_RPC_THROTTLE_ON_RS);<a name="line.79"></a>
-<span class="sourceLineNo">080</span> return Flow.HAS_MORE_STATE;<a name="line.80"></a>
-<span class="sourceLineNo">081</span> case SWITCH_RPC_THROTTLE_ON_RS:<a name="line.81"></a>
-<span class="sourceLineNo">082</span> SwitchRpcThrottleRemoteProcedure[] subProcedures =<a name="line.82"></a>
-<span class="sourceLineNo">083</span> env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.83"></a>
-<span class="sourceLineNo">084</span> .map(sn -> new SwitchRpcThrottleRemoteProcedure(sn, rpcThrottleEnabled))<a name="line.84"></a>
-<span class="sourceLineNo">085</span> .toArray(SwitchRpcThrottleRemoteProcedure[]::new);<a name="line.85"></a>
-<span class="sourceLineNo">086</span> addChildProcedure(subProcedures);<a name="line.86"></a>
-<span class="sourceLineNo">087</span> setNextState(SwitchRpcThrottleState.POST_SWITCH_RPC_THROTTLE);<a name="line.87"></a>
-<span class="sourceLineNo">088</span> return Flow.HAS_MORE_STATE;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> case POST_SWITCH_RPC_THROTTLE:<a name="line.89"></a>
-<span class="sourceLineNo">090</span> ProcedurePrepareLatch.releaseLatch(syncLatch, this);<a name="line.90"></a>
-<span class="sourceLineNo">091</span> return Flow.NO_MORE_STATE;<a name="line.91"></a>
-<span class="sourceLineNo">092</span> default:<a name="line.92"></a>
-<span class="sourceLineNo">093</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.93"></a>
-<span class="sourceLineNo">094</span> }<a name="line.94"></a>
-<span class="sourceLineNo">095</span> }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span> @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span> protected void rollbackState(MasterProcedureEnv env, SwitchRpcThrottleState state)<a name="line.98"></a>
-<span class="sourceLineNo">099</span> throws IOException, InterruptedException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span> }<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span> @Override<a name="line.102"></a>
-<span class="sourceLineNo">103</span> protected SwitchRpcThrottleState getState(int stateId) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span> return SwitchRpcThrottleState.forNumber(stateId);<a name="line.104"></a>
-<span class="sourceLineNo">105</span> }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span> protected int getStateId(SwitchRpcThrottleState throttleState) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span> return throttleState.getNumber();<a name="line.109"></a>
-<span class="sourceLineNo">110</span> }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span> @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span> protected SwitchRpcThrottleState getInitialState() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span> return SwitchRpcThrottleState.UPDATE_SWITCH_RPC_THROTTLE_STORAGE;<a name="line.114"></a>
-<span class="sourceLineNo">115</span> }<a name="line.115"></a>
-<span class="sourceLineNo">116</span><a name="line.116"></a>
-<span class="sourceLineNo">117</span> @Override<a name="line.117"></a>
-<span class="sourceLineNo">118</span> protected SwitchRpcThrottleState getCurrentState() {<a name="line.118"></a>
-<span class="sourceLineNo">119</span> return super.getCurrentState();<a name="line.119"></a>
-<span class="sourceLineNo">120</span> }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span> @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span> super.serializeStateData(serializer);<a name="line.124"></a>
-<span class="sourceLineNo">125</span> serializer.serialize(<a name="line.125"></a>
-<span class="sourceLineNo">126</span> SwitchRpcThrottleStateData.newBuilder().setRpcThrottleEnabled(rpcThrottleEnabled).build());<a name="line.126"></a>
-<span class="sourceLineNo">127</span> }<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span> @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.130"></a>
-<span class="sourceLineNo">131</span> super.deserializeStateData(serializer);<a name="line.131"></a>
-<span class="sourceLineNo">132</span> SwitchRpcThrottleStateData data = serializer.deserialize(SwitchRpcThrottleStateData.class);<a name="line.132"></a>
-<span class="sourceLineNo">133</span> rpcThrottleEnabled = data.getRpcThrottleEnabled();<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span><a name="line.135"></a>
-<span class="sourceLineNo">136</span> @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span> public ServerName getServerName() {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> return serverName;<a name="line.138"></a>
-<span class="sourceLineNo">139</span> }<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span> @Override<a name="line.141"></a>
-<span class="sourceLineNo">142</span> public boolean hasMetaTableRegion() {<a name="line.142"></a>
-<span class="sourceLineNo">143</span> return false;<a name="line.143"></a>
-<span class="sourceLineNo">144</span> }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span> @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span> public ServerOperationType getServerOperationType() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span> return ServerOperationType.SWITCH_RPC_THROTTLE;<a name="line.148"></a>
-<span class="sourceLineNo">149</span> }<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span> public void switchThrottleState(MasterProcedureEnv env, boolean rpcThrottleEnabled)<a name="line.151"></a>
-<span class="sourceLineNo">152</span> throws IOException {<a name="line.152"></a>
-<span class="sourceLineNo">153</span> rpcThrottleStorage.switchRpcThrottle(rpcThrottleEnabled);<a name="line.153"></a>
-<span class="sourceLineNo">154</span> }<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span> @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span> sb.append(getClass().getSimpleName());<a name="line.158"></a>
-<span class="sourceLineNo">159</span> sb.append(" server=");<a name="line.159"></a>
-<span class="sourceLineNo">160</span> sb.append(serverName);<a name="line.160"></a>
-<span class="sourceLineNo">161</span> sb.append(", rpcThrottleEnabled=");<a name="line.161"></a>
-<span class="sourceLineNo">162</span> sb.append(rpcThrottleEnabled);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>}<a name="line.164"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.slf4j.Logger;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.slf4j.LoggerFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleState;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SwitchRpcThrottleStateData;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>/**<a name="line.37"></a>
+<span class="sourceLineNo">038</span> * The procedure to switch rpc throttle<a name="line.38"></a>
+<span class="sourceLineNo">039</span> */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>@InterfaceAudience.Private<a name="line.40"></a>
+<span class="sourceLineNo">041</span>public class SwitchRpcThrottleProcedure<a name="line.41"></a>
+<span class="sourceLineNo">042</span> extends StateMachineProcedure<MasterProcedureEnv, SwitchRpcThrottleState><a name="line.42"></a>
+<span class="sourceLineNo">043</span> implements ServerProcedureInterface {<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span> private static Logger LOG = LoggerFactory.getLogger(SwitchRpcThrottleProcedure.class);<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span> private RpcThrottleStorage rpcThrottleStorage;<a name="line.47"></a>
+<span class="sourceLineNo">048</span> private boolean rpcThrottleEnabled;<a name="line.48"></a>
+<span class="sourceLineNo">049</span> private ProcedurePrepareLatch syncLatch;<a name="line.49"></a>
+<span class="sourceLineNo">050</span> private ServerName serverName;<a name="line.50"></a>
+<span class="sourceLineNo">051</span> private RetryCounter retryCounter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span> public SwitchRpcThrottleProcedure() {<a name="line.53"></a>
+<span class="sourceLineNo">054</span> }<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span> public SwitchRpcThrottleProcedure(RpcThrottleStorage rpcThrottleStorage,<a name="line.56"></a>
+<span class="sourceLineNo">057</span> boolean rpcThrottleEnabled, ServerName serverName, final ProcedurePrepareLatch syncLatch) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span> this.rpcThrottleStorage = rpcThrottleStorage;<a name="line.58"></a>
+<span class="sourceLineNo">059</span> this.syncLatch = syncLatch;<a name="line.59"></a>
+<span class="sourceLineNo">060</span> this.rpcThrottleEnabled = rpcThrottleEnabled;<a name="line.60"></a>
+<span class="sourceLineNo">061</span> this.serverName = serverName;<a name="line.61"></a>
+<span class="sourceLineNo">062</span> }<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span> @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected Flow executeFromState(MasterProcedureEnv env, SwitchRpcThrottleState state)<a name="line.65"></a>
+<span class="sourceLineNo">066</span> throws ProcedureSuspendedException, ProcedureYieldException, InterruptedException {<a name="line.66"></a>
+<span class="sourceLineNo">067</span> switch (state) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span> case UPDATE_SWITCH_RPC_THROTTLE_STORAGE:<a name="line.68"></a>
+<span class="sourceLineNo">069</span> try {<a name="line.69"></a>
+<span class="sourceLineNo">070</span> switchThrottleState(env, rpcThrottleEnabled);<a name="line.70"></a>
+<span class="sourceLineNo">071</span> } catch (IOException e) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span> if (retryCounter == null) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span> retryCounter = ProcedureUtil.createRetryCounter(env.getMasterConfiguration());<a name="line.73"></a>
+<span class="sourceLineNo">074</span> }<a name="line.74"></a>
+<span class="sourceLineNo">075</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.75"></a>
+<span class="sourceLineNo">076</span> LOG.warn("Failed to store rpc throttle value {}, sleep {} secs and retry",<a name="line.76"></a>
+<span class="sourceLineNo">077</span> rpcThrottleEnabled, backoff / 1000, e);<a name="line.77"></a>
+<span class="sourceLineNo">078</span> setTimeout(Math.toIntExact(backoff));<a name="line.78"></a>
+<span class="sourceLineNo">079</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.79"></a>
+<span class="sourceLineNo">080</span> skipPersistence();<a name="line.80"></a>
+<span class="sourceLineNo">081</span> throw new ProcedureSuspendedException();<a name="line.81"></a>
+<span class="sourceLineNo">082</span> }<a name="line.82"></a>
+<span class="sourceLineNo">083</span> setNextState(SwitchRpcThrottleState.SWITCH_RPC_THROTTLE_ON_RS);<a name="line.83"></a>
+<span class="sourceLineNo">084</span> return Flow.HAS_MORE_STATE;<a name="line.84"></a>
+<span class="sourceLineNo">085</span> case SWITCH_RPC_THROTTLE_ON_RS:<a name="line.85"></a>
+<span class="sourceLineNo">086</span> SwitchRpcThrottleRemoteProcedure[] subProcedures =<a name="line.86"></a>
+<span class="sourceLineNo">087</span> env.getMasterServices().getServerManager().getOnlineServersList().stream()<a name="line.87"></a>
+<span class="sourceLineNo">088</span> .map(sn -> new SwitchRpcThrottleRemoteProcedure(sn, rpcThrottleEnabled))<a name="line.88"></a>
+<span class="sourceLineNo">089</span> .toArray(SwitchRpcThrottleRemoteProcedure[]::new);<a name="line.89"></a>
+<span class="sourceLineNo">090</span> addChildProcedure(subProcedures);<a name="line.90"></a>
+<span class="sourceLineNo">091</span> setNextState(SwitchRpcThrottleState.POST_SWITCH_RPC_THROTTLE);<a name="line.91"></a>
+<span class="sourceLineNo">092</span> return Flow.HAS_MORE_STATE;<a name="line.92"></a>
+<span class="sourceLineNo">093</span> case POST_SWITCH_RPC_THROTTLE:<a name="line.93"></a>
+<span class="sourceLineNo">094</span> ProcedurePrepareLatch.releaseLatch(syncLatch, this);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> return Flow.NO_MORE_STATE;<a name="line.95"></a>
+<span class="sourceLineNo">096</span> default:<a name="line.96"></a>
+<span class="sourceLineNo">097</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> }<a name="line.98"></a>
+<span class="sourceLineNo">099</span> }<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span> @Override<a name="line.101"></a>
+<span class="sourceLineNo">102</span> protected void rollbackState(MasterProcedureEnv env, SwitchRpcThrottleState state)<a name="line.102"></a>
+<span class="sourceLineNo">103</span> throws IOException, InterruptedException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span> }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span> @Override<a name="line.106"></a>
+<span class="sourceLineNo">107</span> protected SwitchRpcThrottleState getState(int stateId) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span> return SwitchRpcThrottleState.forNumber(stateId);<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span> @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span> protected int getStateId(SwitchRpcThrottleState throttleState) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span> return throttleState.getNumber();<a name="line.113"></a>
+<span class="sourceLineNo">114</span> }<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span> @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span> protected SwitchRpcThrottleState getInitialState() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span> return SwitchRpcThrottleState.UPDATE_SWITCH_RPC_THROTTLE_STORAGE;<a name="line.118"></a>
+<span class="sourceLineNo">119</span> }<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span> @Override<a name="line.121"></a>
+<span class="sourceLineNo">122</span> protected SwitchRpcThrottleState getCurrentState() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span> return super.getCurrentState();<a name="line.123"></a>
+<span class="sourceLineNo">124</span> }<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span> @Override<a name="line.126"></a>
+<span class="sourceLineNo">127</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> super.serializeStateData(serializer);<a name="line.128"></a>
+<span class="sourceLineNo">129</span> serializer.serialize(<a name="line.129"></a>
+<span class="sourceLineNo">130</span> SwitchRpcThrottleStateData.newBuilder().setRpcThrottleEnabled(rpcThrottleEnabled).build());<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> @Override<a name="line.133"></a>
+<span class="sourceLineNo">134</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.134"></a>
+<span class="sourceLineNo">135</span> super.deserializeStateData(serializer);<a name="line.135"></a>
+<span class="sourceLineNo">136</span> SwitchRpcThrottleStateData data = serializer.deserialize(SwitchRpcThrottleStateData.class);<a name="line.136"></a>
+<span class="sourceLineNo">137</span> rpcThrottleEnabled = data.getRpcThrottleEnabled();<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span> public ServerName getServerName() {<a name="line.141"></a>
+<span class="sourceLineNo">142</span> return serverName;<a name="line.142"></a>
+<span class="sourceLineNo">143</span> }<a name="line.143"></a>
+<span class="sourceLineNo">144</span><a name="line.144"></a>
+<span class="sourceLineNo">145</span> @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span> public boolean hasMetaTableRegion() {<a name="line.146"></a>
+<span class="sourceLineNo">147</span> return false;<a name="line.147"></a>
+<span class="sourceLineNo">148</span> }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span> @Override<a name="line.150"></a>
+<span class="sourceLineNo">151</span> public ServerOperationType getServerOperationType() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span> return ServerOperationType.SWITCH_RPC_THROTTLE;<a name="line.152"></a>
+<span class="sourceLineNo">153</span> }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span> public void switchThrottleState(MasterProcedureEnv env, boolean rpcThrottleEnabled)<a name="line.155"></a>
+<span class="sourceLineNo">156</span> throws IOException {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> rpcThrottleStorage.switchRpcThrottle(rpcThrottleEnabled);<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span> @Override<a name="line.160"></a>
+<span class="sourceLineNo">161</span> public void toStringClassDetails(StringBuilder sb) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span> sb.append(getClass().getSimpleName());<a name="line.162"></a>
+<span class="sourceLineNo">163</span> sb.append(" server=");<a name="line.163"></a>
+<span class="sourceLineNo">164</span> sb.append(serverName);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> sb.append(", rpcThrottleEnabled=");<a name="line.165"></a>
+<span class="sourceLineNo">166</span> sb.append(rpcThrottleEnabled);<a name="line.166"></a>
+<span class="sourceLineNo">167</span> }<a name="line.167"></a>
+<span class="sourceLineNo">168</span>}<a name="line.168"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html
index eac3e9d..8d75a9f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/AbstractPeerNoLockProcedure.html
@@ -26,84 +26,96 @@
<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.master.replication;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.StateMachineProcedure;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerProcedureStateData;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * Base class for replication peer related procedures which do not need to hold locks(for most of<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * the sub procedures).<a name="line.33"></a>
-<span class="sourceLineNo">034</span> */<a name="line.34"></a>
-<span class="sourceLineNo">035</span>@InterfaceAudience.Private<a name="line.35"></a>
-<span class="sourceLineNo">036</span>public abstract class AbstractPeerNoLockProcedure<TState><a name="line.36"></a>
-<span class="sourceLineNo">037</span> extends StateMachineProcedure<MasterProcedureEnv, TState> implements PeerProcedureInterface {<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span> protected String peerId;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span> protected int attempts;<a name="line.41"></a>
+<span class="sourceLineNo">021</span>import java.util.function.LongConsumer;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.conf.Configuration;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.master.procedure.PeerProcedureInterface;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.procedure2.StateMachineProcedure;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.RetryCounter;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerProcedureStateData;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.ProcedureProtos;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * Base class for replication peer related procedures which do not need to hold locks(for most of<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * the sub procedures).<a name="line.37"></a>
+<span class="sourceLineNo">038</span> */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
+<span class="sourceLineNo">040</span>public abstract class AbstractPeerNoLockProcedure<TState><a name="line.40"></a>
+<span class="sourceLineNo">041</span> extends StateMachineProcedure<MasterProcedureEnv, TState> implements PeerProcedureInterface {<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span> protected AbstractPeerNoLockProcedure() {<a name="line.43"></a>
-<span class="sourceLineNo">044</span> }<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span> protected AbstractPeerNoLockProcedure(String peerId) {<a name="line.46"></a>
-<span class="sourceLineNo">047</span> this.peerId = peerId;<a name="line.47"></a>
+<span class="sourceLineNo">043</span> protected String peerId;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span> private RetryCounter retryCounter;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span> protected AbstractPeerNoLockProcedure() {<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> @Override<a name="line.50"></a>
-<span class="sourceLineNo">051</span> public String getPeerId() {<a name="line.51"></a>
-<span class="sourceLineNo">052</span> return peerId;<a name="line.52"></a>
-<span class="sourceLineNo">053</span> }<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span> @Override<a name="line.55"></a>
-<span class="sourceLineNo">056</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.56"></a>
-<span class="sourceLineNo">057</span> return env.waitInitialized(this);<a name="line.57"></a>
-<span class="sourceLineNo">058</span> }<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span> @Override<a name="line.60"></a>
-<span class="sourceLineNo">061</span> protected void rollbackState(MasterProcedureEnv env, TState state)<a name="line.61"></a>
-<span class="sourceLineNo">062</span> throws IOException, InterruptedException {<a name="line.62"></a>
-<span class="sourceLineNo">063</span> if (state == getInitialState()) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span> // actually the peer related operations has no rollback, but if we haven't done any<a name="line.64"></a>
-<span class="sourceLineNo">065</span> // modifications on the peer storage yet, we can just return.<a name="line.65"></a>
-<span class="sourceLineNo">066</span> return;<a name="line.66"></a>
-<span class="sourceLineNo">067</span> }<a name="line.67"></a>
-<span class="sourceLineNo">068</span> throw new UnsupportedOperationException();<a name="line.68"></a>
-<span class="sourceLineNo">069</span> }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span> @Override<a name="line.71"></a>
-<span class="sourceLineNo">072</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.72"></a>
-<span class="sourceLineNo">073</span> super.serializeStateData(serializer);<a name="line.73"></a>
-<span class="sourceLineNo">074</span> serializer.serialize(PeerProcedureStateData.newBuilder().setPeerId(peerId).build());<a name="line.74"></a>
-<span class="sourceLineNo">075</span> }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span> @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.78"></a>
-<span class="sourceLineNo">079</span> super.deserializeStateData(serializer);<a name="line.79"></a>
-<span class="sourceLineNo">080</span> peerId = serializer.deserialize(PeerProcedureStateData.class).getPeerId();<a name="line.80"></a>
-<span class="sourceLineNo">081</span> }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span> @Override<a name="line.83"></a>
-<span class="sourceLineNo">084</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.85"></a>
-<span class="sourceLineNo">086</span> env.getProcedureScheduler().addFront(this);<a name="line.86"></a>
-<span class="sourceLineNo">087</span> return false;<a name="line.87"></a>
-<span class="sourceLineNo">088</span> }<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span> protected final ProcedureSuspendedException suspend(long backoff)<a name="line.90"></a>
-<span class="sourceLineNo">091</span> throws ProcedureSuspendedException {<a name="line.91"></a>
-<span class="sourceLineNo">092</span> attempts++;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> setTimeout(Math.toIntExact(backoff));<a name="line.93"></a>
-<span class="sourceLineNo">094</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.94"></a>
-<span class="sourceLineNo">095</span> skipPersistence();<a name="line.95"></a>
-<span class="sourceLineNo">096</span> throw new ProcedureSuspendedException();<a name="line.96"></a>
-<span class="sourceLineNo">097</span> }<a name="line.97"></a>
-<span class="sourceLineNo">098</span>}<a name="line.98"></a>
+<span class="sourceLineNo">050</span> protected AbstractPeerNoLockProcedure(String peerId) {<a name="line.50"></a>
+<span class="sourceLineNo">051</span> this.peerId = peerId;<a name="line.51"></a>
+<span class="sourceLineNo">052</span> }<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span> @Override<a name="line.54"></a>
+<span class="sourceLineNo">055</span> public String getPeerId() {<a name="line.55"></a>
+<span class="sourceLineNo">056</span> return peerId;<a name="line.56"></a>
+<span class="sourceLineNo">057</span> }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span> @Override<a name="line.59"></a>
+<span class="sourceLineNo">060</span> protected boolean waitInitialized(MasterProcedureEnv env) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> return env.waitInitialized(this);<a name="line.61"></a>
+<span class="sourceLineNo">062</span> }<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span> @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected void rollbackState(MasterProcedureEnv env, TState state)<a name="line.65"></a>
+<span class="sourceLineNo">066</span> throws IOException, InterruptedException {<a name="line.66"></a>
+<span class="sourceLineNo">067</span> if (state == getInitialState()) {<a name="line.67"></a>
+<span class="sourceLineNo">068</span> // actually the peer related operations has no rollback, but if we haven't done any<a name="line.68"></a>
+<span class="sourceLineNo">069</span> // modifications on the peer storage yet, we can just return.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> return;<a name="line.70"></a>
+<span class="sourceLineNo">071</span> }<a name="line.71"></a>
+<span class="sourceLineNo">072</span> throw new UnsupportedOperationException();<a name="line.72"></a>
+<span class="sourceLineNo">073</span> }<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span> @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.76"></a>
+<span class="sourceLineNo">077</span> super.serializeStateData(serializer);<a name="line.77"></a>
+<span class="sourceLineNo">078</span> serializer.serialize(PeerProcedureStateData.newBuilder().setPeerId(peerId).build());<a name="line.78"></a>
+<span class="sourceLineNo">079</span> }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span> @Override<a name="line.81"></a>
+<span class="sourceLineNo">082</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.82"></a>
+<span class="sourceLineNo">083</span> super.deserializeStateData(serializer);<a name="line.83"></a>
+<span class="sourceLineNo">084</span> peerId = serializer.deserialize(PeerProcedureStateData.class).getPeerId();<a name="line.84"></a>
+<span class="sourceLineNo">085</span> }<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span> @Override<a name="line.87"></a>
+<span class="sourceLineNo">088</span> protected synchronized boolean setTimeoutFailure(MasterProcedureEnv env) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span> setState(ProcedureProtos.ProcedureState.RUNNABLE);<a name="line.89"></a>
+<span class="sourceLineNo">090</span> env.getProcedureScheduler().addFront(this);<a name="line.90"></a>
+<span class="sourceLineNo">091</span> return false;<a name="line.91"></a>
+<span class="sourceLineNo">092</span> }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span> protected final ProcedureSuspendedException suspend(Configuration conf,<a name="line.94"></a>
+<span class="sourceLineNo">095</span> LongConsumer backoffConsumer) throws ProcedureSuspendedException {<a name="line.95"></a>
+<span class="sourceLineNo">096</span> if (retryCounter == null) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span> retryCounter = ProcedureUtil.createRetryCounter(conf);<a name="line.97"></a>
+<span class="sourceLineNo">098</span> }<a name="line.98"></a>
+<span class="sourceLineNo">099</span> long backoff = retryCounter.getBackoffTimeAndIncrementAttempts();<a name="line.99"></a>
+<span class="sourceLineNo">100</span> backoffConsumer.accept(backoff);<a name="line.100"></a>
+<span class="sourceLineNo">101</span> setTimeout(Math.toIntExact(backoff));<a name="line.101"></a>
+<span class="sourceLineNo">102</span> setState(ProcedureProtos.ProcedureState.WAITING_TIMEOUT);<a name="line.102"></a>
+<span class="sourceLineNo">103</span> skipPersistence();<a name="line.103"></a>
+<span class="sourceLineNo">104</span> throw new ProcedureSuspendedException();<a name="line.104"></a>
+<span class="sourceLineNo">105</span> }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span> protected final void resetRetry() {<a name="line.107"></a>
+<span class="sourceLineNo">108</span> retryCounter = null;<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>}<a name="line.110"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
index 2b52e1c..924031e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/ModifyPeerProcedure.html
@@ -36,249 +36,243 @@
<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.master.procedure.ProcedurePrepareLatch;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.master.procedure.ReopenTableRegionsProcedure;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState;<a name="line.41"></a>
-<span class="sourceLineNo">042</span><a name="line.42"></a>
-<span class="sourceLineNo">043</span>/**<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * The base class for all replication peer related procedure except sync replication state<a name="line.44"></a>
-<span class="sourceLineNo">045</span> * transition.<a name="line.45"></a>
-<span class="sourceLineNo">046</span> */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>@InterfaceAudience.Private<a name="line.47"></a>
-<span class="sourceLineNo">048</span>public abstract class ModifyPeerProcedure extends AbstractPeerProcedure<PeerModificationState> {<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span> private static final Logger LOG = LoggerFactory.getLogger(ModifyPeerProcedure.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> protected ModifyPeerProcedure() {<a name="line.52"></a>
-<span class="sourceLineNo">053</span> }<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span> protected ModifyPeerProcedure(String peerId) {<a name="line.55"></a>
-<span class="sourceLineNo">056</span> super(peerId);<a name="line.56"></a>
-<span class="sourceLineNo">057</span> }<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span> /**<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * Called before we start the actual processing. The implementation should call the pre CP hook,<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * and also the pre-check for the peer modification.<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * <p><a name="line.62"></a>
-<span class="sourceLineNo">063</span> * If an IOException is thrown then we will give up and mark the procedure as failed directly. If<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * all checks passes then the procedure can not be rolled back any more.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> */<a name="line.65"></a>
-<span class="sourceLineNo">066</span> protected abstract void prePeerModification(MasterProcedureEnv env)<a name="line.66"></a>
-<span class="sourceLineNo">067</span> throws IOException, ReplicationException, InterruptedException;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span> protected abstract void updatePeerStorage(MasterProcedureEnv env) throws ReplicationException;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span> /**<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * Called before we finish the procedure. The implementation can do some logging work, and also<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * call the coprocessor hook if any.<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * <p><a name="line.74"></a>
-<span class="sourceLineNo">075</span> * Notice that, since we have already done the actual work, throwing {@code IOException} here will<a name="line.75"></a>
-<span class="sourceLineNo">076</span> * not fail this procedure, we will just ignore it and finish the procedure as suceeded. If<a name="line.76"></a>
-<span class="sourceLineNo">077</span> * {@code ReplicationException} is thrown we will retry since this usually means we fails to<a name="line.77"></a>
-<span class="sourceLineNo">078</span> * update the peer storage.<a name="line.78"></a>
-<span class="sourceLineNo">079</span> */<a name="line.79"></a>
-<span class="sourceLineNo">080</span> protected abstract void postPeerModification(MasterProcedureEnv env)<a name="line.80"></a>
-<span class="sourceLineNo">081</span> throws IOException, ReplicationException;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span> protected void releaseLatch(MasterProcedureEnv env) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span> ProcedurePrepareLatch.releaseLatch(latch, this);<a name="line.84"></a>
-<span class="sourceLineNo">085</span> }<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span> /**<a name="line.87"></a>
-<span class="sourceLineNo">088</span> * Implementation class can override this method. By default we will jump to<a name="line.88"></a>
-<span class="sourceLineNo">089</span> * POST_PEER_MODIFICATION and finish the procedure.<a name="line.89"></a>
-<span class="sourceLineNo">090</span> */<a name="line.90"></a>
-<span class="sourceLineNo">091</span> protected PeerModificationState nextStateAfterRefresh() {<a name="line.91"></a>
-<span class="sourceLineNo">092</span> return PeerModificationState.POST_PEER_MODIFICATION;<a name="line.92"></a>
-<span class="sourceLineNo">093</span> }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span> /**<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * The implementation class should override this method if the procedure may enter the serial<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * related states.<a name="line.97"></a>
-<span class="sourceLineNo">098</span> */<a name="line.98"></a>
-<span class="sourceLineNo">099</span> protected boolean enablePeerBeforeFinish() {<a name="line.99"></a>
-<span class="sourceLineNo">100</span> throw new UnsupportedOperationException();<a name="line.100"></a>
-<span class="sourceLineNo">101</span> }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span> protected ReplicationPeerConfig getOldPeerConfig() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span> return null;<a name="line.104"></a>
-<span class="sourceLineNo">105</span> }<a name="line.105"></a>
-<span class="sourceLineNo">106</span><a name="line.106"></a>
-<span class="sourceLineNo">107</span> protected ReplicationPeerConfig getNewPeerConfig() {<a name="line.107"></a>
-<span class="sourceLineNo">108</span> throw new UnsupportedOperationException();<a name="line.108"></a>
-<span class="sourceLineNo">109</span> }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> protected void updateLastPushedSequenceIdForSerialPeer(MasterProcedureEnv env)<a name="line.111"></a>
-<span class="sourceLineNo">112</span> throws IOException, ReplicationException {<a name="line.112"></a>
-<span class="sourceLineNo">113</span> throw new UnsupportedOperationException();<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> // If the table is in enabling state, we need to wait until it is enabled and then reopen all its<a name="line.116"></a>
-<span class="sourceLineNo">117</span> // regions.<a name="line.117"></a>
-<span class="sourceLineNo">118</span> private boolean needReopen(TableStateManager tsm, TableName tn) throws IOException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span> for (;;) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span> try {<a name="line.120"></a>
-<span class="sourceLineNo">121</span> TableState state = tsm.getTableState(tn);<a name="line.121"></a>
-<span class="sourceLineNo">122</span> if (state.isEnabled()) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> return true;<a name="line.123"></a>
-<span class="sourceLineNo">124</span> }<a name="line.124"></a>
-<span class="sourceLineNo">125</span> if (!state.isEnabling()) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> return false;<a name="line.126"></a>
-<span class="sourceLineNo">127</span> }<a name="line.127"></a>
-<span class="sourceLineNo">128</span> Thread.sleep(SLEEP_INTERVAL_MS);<a name="line.128"></a>
-<span class="sourceLineNo">129</span> } catch (TableStateNotFoundException e) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span> return false;<a name="line.130"></a>
-<span class="sourceLineNo">131</span> } catch (InterruptedException e) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span> throw (IOException) new InterruptedIOException(e.getMessage()).initCause(e);<a name="line.132"></a>
-<span class="sourceLineNo">133</span> }<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span> }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span> // will be override in test to simulate error<a name="line.137"></a>
-<span class="sourceLineNo">138</span> @VisibleForTesting<a name="line.138"></a>
-<span class="sourceLineNo">139</span> protected void reopenRegions(MasterProcedureEnv env) throws IOException {<a name="line.139"></a>
-<span class="sourceLineNo">140</span> ReplicationPeerConfig peerConfig = getNewPeerConfig();<a name="line.140"></a>
-<span class="sourceLineNo">141</span> ReplicationPeerConfig oldPeerConfig = getOldPeerConfig();<a name="line.141"></a>
-<span class="sourceLineNo">142</span> TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.142"></a>
-<span class="sourceLineNo">143</span> for (TableDescriptor td : env.getMasterServices().getTableDescriptors().getAll().values()) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span> if (!td.hasGlobalReplicationScope()) {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> continue;<a name="line.145"></a>
-<span class="sourceLineNo">146</span> }<a name="line.146"></a>
-<span class="sourceLineNo">147</span> TableName tn = td.getTableName();<a name="line.147"></a>
-<span class="sourceLineNo">148</span> if (!ReplicationUtils.contains(peerConfig, tn)) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span> continue;<a name="line.149"></a>
-<span class="sourceLineNo">150</span> }<a name="line.150"></a>
-<span class="sourceLineNo">151</span> if (oldPeerConfig != null && oldPeerConfig.isSerial() &&<a name="line.151"></a>
-<span class="sourceLineNo">152</span> ReplicationUtils.contains(oldPeerConfig, tn)) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span> continue;<a name="line.153"></a>
-<span class="sourceLineNo">154</span> }<a name="line.154"></a>
-<span class="sourceLineNo">155</span> if (needReopen(tsm, tn)) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> addChildProcedure(new ReopenTableRegionsProcedure(tn));<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span> }<a name="line.158"></a>
-<span class="sourceLineNo">159</span> }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span> @Override<a name="line.161"></a>
-<span class="sourceLineNo">162</span> protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.162"></a>
-<span class="sourceLineNo">163</span> throws ProcedureSuspendedException, InterruptedException {<a name="line.163"></a>
-<span class="sourceLineNo">164</span> switch (state) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span> case PRE_PEER_MODIFICATION:<a name="line.165"></a>
-<span class="sourceLineNo">166</span> try {<a name="line.166"></a>
-<span class="sourceLineNo">167</span> prePeerModification(env);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> } catch (IOException e) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.169"></a>
-<span class="sourceLineNo">170</span> "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.170"></a>
-<span class="sourceLineNo">171</span> setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.171"></a>
-<span class="sourceLineNo">172</span> releaseLatch(env);<a name="line.172"></a>
-<span class="sourceLineNo">173</span> return Flow.NO_MORE_STATE;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> } catch (ReplicationException e) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> LOG.warn("{} failed to call prePeerModification for peer {}, sleep {} secs",<a name="line.176"></a>
-<span class="sourceLineNo">177</span> getClass().getName(), peerId, backoff / 1000, e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> throw suspend(backoff);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span> attempts = 0;<a name="line.180"></a>
-<span class="sourceLineNo">181</span> setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> return Flow.HAS_MORE_STATE;<a name="line.182"></a>
-<span class="sourceLineNo">183</span> case UPDATE_PEER_STORAGE:<a name="line.183"></a>
-<span class="sourceLineNo">184</span> try {<a name="line.184"></a>
-<span class="sourceLineNo">185</span> updatePeerStorage(env);<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } catch (ReplicationException e) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.187"></a>
-<span class="sourceLineNo">188</span> LOG.warn("{} update peer storage for peer {} failed, sleep {} secs", getClass().getName(),<a name="line.188"></a>
-<span class="sourceLineNo">189</span> peerId, backoff / 1000, e);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> throw suspend(backoff);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> }<a name="line.191"></a>
-<span class="sourceLineNo">192</span> attempts = 0;<a name="line.192"></a>
-<span class="sourceLineNo">193</span> setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.193"></a>
-<span class="sourceLineNo">194</span> return Flow.HAS_MORE_STATE;<a name="line.194"></a>
-<span class="sourceLineNo">195</span> case REFRESH_PEER_ON_RS:<a name="line.195"></a>
-<span class="sourceLineNo">196</span> refreshPeer(env, getPeerOperationType());<a name="line.196"></a>
-<span class="sourceLineNo">197</span> setNextState(nextStateAfterRefresh());<a name="line.197"></a>
-<span class="sourceLineNo">198</span> return Flow.HAS_MORE_STATE;<a name="line.198"></a>
-<span class="sourceLineNo">199</span> case SERIAL_PEER_REOPEN_REGIONS:<a name="line.199"></a>
-<span class="sourceLineNo">200</span> try {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> reopenRegions(env);<a name="line.201"></a>
-<span class="sourceLineNo">202</span> } catch (Exception e) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.203"></a>
-<span class="sourceLineNo">204</span> LOG.warn("{} reopen regions for peer {} failed, sleep {} secs", getClass().getName(),<a name="line.204"></a>
-<span class="sourceLineNo">205</span> peerId, backoff / 1000, e);<a name="line.205"></a>
-<span class="sourceLineNo">206</span> throw suspend(backoff);<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span> attempts = 0;<a name="line.208"></a>
-<span class="sourceLineNo">209</span> setNextState(PeerModificationState.SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> return Flow.HAS_MORE_STATE;<a name="line.210"></a>
-<span class="sourceLineNo">211</span> case SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID:<a name="line.211"></a>
-<span class="sourceLineNo">212</span> try {<a name="line.212"></a>
-<span class="sourceLineNo">213</span> updateLastPushedSequenceIdForSerialPeer(env);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> } catch (Exception e) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.215"></a>
-<span class="sourceLineNo">216</span> LOG.warn("{} set last sequence id for peer {} failed, sleep {} secs",<a name="line.216"></a>
-<span class="sourceLineNo">217</span> getClass().getName(), peerId, backoff / 1000, e);<a name="line.217"></a>
-<span class="sourceLineNo">218</span> throw suspend(backoff);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> }<a name="line.219"></a>
-<span class="sourceLineNo">220</span> attempts = 0;<a name="line.220"></a>
-<span class="sourceLineNo">221</span> setNextState(enablePeerBeforeFinish() ? PeerModificationState.SERIAL_PEER_SET_PEER_ENABLED<a name="line.221"></a>
-<span class="sourceLineNo">222</span> : PeerModificationState.POST_PEER_MODIFICATION);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> return Flow.HAS_MORE_STATE;<a name="line.223"></a>
-<span class="sourceLineNo">224</span> case SERIAL_PEER_SET_PEER_ENABLED:<a name="line.224"></a>
-<span class="sourceLineNo">225</span> try {<a name="line.225"></a>
-<span class="sourceLineNo">226</span> enablePeer(env);<a name="line.226"></a>
-<span class="sourceLineNo">227</span> } catch (ReplicationException e) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.228"></a>
-<span class="sourceLineNo">229</span> LOG.warn("{} enable peer before finish for peer {} failed, sleep {} secs",<a name="line.229"></a>
-<span class="sourceLineNo">230</span> getClass().getName(), peerId, backoff / 1000, e);<a name="line.230"></a>
-<span class="sourceLineNo">231</span> throw suspend(backoff);<a name="line.231"></a>
-<span class="sourceLineNo">232</span> }<a name="line.232"></a>
-<span class="sourceLineNo">233</span> attempts = 0;<a name="line.233"></a>
-<span class="sourceLineNo">234</span> setNextState(PeerModificationState.SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS);<a name="line.234"></a>
-<span class="sourceLineNo">235</span> return Flow.HAS_MORE_STATE;<a name="line.235"></a>
-<span class="sourceLineNo">236</span> case SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.236"></a>
-<span class="sourceLineNo">237</span> refreshPeer(env, PeerOperationType.ENABLE);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> setNextState(PeerModificationState.POST_PEER_MODIFICATION);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> return Flow.HAS_MORE_STATE;<a name="line.239"></a>
-<span class="sourceLineNo">240</span> case POST_PEER_MODIFICATION:<a name="line.240"></a>
-<span class="sourceLineNo">241</span> try {<a name="line.241"></a>
-<span class="sourceLineNo">242</span> postPeerModification(env);<a name="line.242"></a>
-<span class="sourceLineNo">243</span> } catch (ReplicationException e) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> LOG.warn("{} failed to call postPeerModification for peer {}, sleep {} secs",<a name="line.245"></a>
-<span class="sourceLineNo">246</span> getClass().getName(), peerId, backoff / 1000, e);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> throw suspend(backoff);<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } catch (IOException e) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.249"></a>
-<span class="sourceLineNo">250</span> "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.250"></a>
-<span class="sourceLineNo">251</span> }<a name="line.251"></a>
-<span class="sourceLineNo">252</span> releaseLatch(env);<a name="line.252"></a>
-<span class="sourceLineNo">253</span> return Flow.NO_MORE_STATE;<a name="line.253"></a>
-<span class="sourceLineNo">254</span> default:<a name="line.254"></a>
-<span class="sourceLineNo">255</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span> @Override<a name="line.259"></a>
-<span class="sourceLineNo">260</span> protected PeerModificationState getState(int stateId) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span> return PeerModificationState.forNumber(stateId);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> }<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span> @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span> protected int getStateId(PeerModificationState state) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span> return state.getNumber();<a name="line.266"></a>
-<span class="sourceLineNo">267</span> }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span> @Override<a name="line.269"></a>
-<span class="sourceLineNo">270</span> protected PeerModificationState getInitialState() {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> return PeerModificationState.PRE_PEER_MODIFICATION;<a name="line.271"></a>
-<span class="sourceLineNo">272</span> }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>}<a name="line.273"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.slf4j.Logger;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.LoggerFactory;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.38"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerModificationState;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * The base class for all replication peer related procedure except sync replication state<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * transition.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public abstract class ModifyPeerProcedure extends AbstractPeerProcedure<PeerModificationState> {<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span> private static final Logger LOG = LoggerFactory.getLogger(ModifyPeerProcedure.class);<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span> protected ModifyPeerProcedure() {<a name="line.51"></a>
+<span class="sourceLineNo">052</span> }<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span> protected ModifyPeerProcedure(String peerId) {<a name="line.54"></a>
+<span class="sourceLineNo">055</span> super(peerId);<a name="line.55"></a>
+<span class="sourceLineNo">056</span> }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span> /**<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * Called before we start the actual processing. The implementation should call the pre CP hook,<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * and also the pre-check for the peer modification.<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * <p><a name="line.61"></a>
+<span class="sourceLineNo">062</span> * If an IOException is thrown then we will give up and mark the procedure as failed directly. If<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * all checks passes then the procedure can not be rolled back any more.<a name="line.63"></a>
+<span class="sourceLineNo">064</span> */<a name="line.64"></a>
+<span class="sourceLineNo">065</span> protected abstract void prePeerModification(MasterProcedureEnv env)<a name="line.65"></a>
+<span class="sourceLineNo">066</span> throws IOException, ReplicationException, InterruptedException;<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span> protected abstract void updatePeerStorage(MasterProcedureEnv env) throws ReplicationException;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span> /**<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * Called before we finish the procedure. The implementation can do some logging work, and also<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * call the coprocessor hook if any.<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * <p><a name="line.73"></a>
+<span class="sourceLineNo">074</span> * Notice that, since we have already done the actual work, throwing {@code IOException} here will<a name="line.74"></a>
+<span class="sourceLineNo">075</span> * not fail this procedure, we will just ignore it and finish the procedure as suceeded. If<a name="line.75"></a>
+<span class="sourceLineNo">076</span> * {@code ReplicationException} is thrown we will retry since this usually means we fails to<a name="line.76"></a>
+<span class="sourceLineNo">077</span> * update the peer storage.<a name="line.77"></a>
+<span class="sourceLineNo">078</span> */<a name="line.78"></a>
+<span class="sourceLineNo">079</span> protected abstract void postPeerModification(MasterProcedureEnv env)<a name="line.79"></a>
+<span class="sourceLineNo">080</span> throws IOException, ReplicationException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span> protected void releaseLatch(MasterProcedureEnv env) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span> ProcedurePrepareLatch.releaseLatch(latch, this);<a name="line.83"></a>
+<span class="sourceLineNo">084</span> }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span> /**<a name="line.86"></a>
+<span class="sourceLineNo">087</span> * Implementation class can override this method. By default we will jump to<a name="line.87"></a>
+<span class="sourceLineNo">088</span> * POST_PEER_MODIFICATION and finish the procedure.<a name="line.88"></a>
+<span class="sourceLineNo">089</span> */<a name="line.89"></a>
+<span class="sourceLineNo">090</span> protected PeerModificationState nextStateAfterRefresh() {<a name="line.90"></a>
+<span class="sourceLineNo">091</span> return PeerModificationState.POST_PEER_MODIFICATION;<a name="line.91"></a>
+<span class="sourceLineNo">092</span> }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span> /**<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * The implementation class should override this method if the procedure may enter the serial<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * related states.<a name="line.96"></a>
+<span class="sourceLineNo">097</span> */<a name="line.97"></a>
+<span class="sourceLineNo">098</span> protected boolean enablePeerBeforeFinish() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span> throw new UnsupportedOperationException();<a name="line.99"></a>
+<span class="sourceLineNo">100</span> }<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> protected ReplicationPeerConfig getOldPeerConfig() {<a name="line.102"></a>
+<span class="sourceLineNo">103</span> return null;<a name="line.103"></a>
+<span class="sourceLineNo">104</span> }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span> protected ReplicationPeerConfig getNewPeerConfig() {<a name="line.106"></a>
+<span class="sourceLineNo">107</span> throw new UnsupportedOperationException();<a name="line.107"></a>
+<span class="sourceLineNo">108</span> }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span> protected void updateLastPushedSequenceIdForSerialPeer(MasterProcedureEnv env)<a name="line.110"></a>
+<span class="sourceLineNo">111</span> throws IOException, ReplicationException {<a name="line.111"></a>
+<span class="sourceLineNo">112</span> throw new UnsupportedOperationException();<a name="line.112"></a>
+<span class="sourceLineNo">113</span> }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span> // If the table is in enabling state, we need to wait until it is enabled and then reopen all its<a name="line.115"></a>
+<span class="sourceLineNo">116</span> // regions.<a name="line.116"></a>
+<span class="sourceLineNo">117</span> private boolean needReopen(TableStateManager tsm, TableName tn) throws IOException {<a name="line.117"></a>
+<span class="sourceLineNo">118</span> for (;;) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span> try {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> TableState state = tsm.getTableState(tn);<a name="line.120"></a>
+<span class="sourceLineNo">121</span> if (state.isEnabled()) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span> return true;<a name="line.122"></a>
+<span class="sourceLineNo">123</span> }<a name="line.123"></a>
+<span class="sourceLineNo">124</span> if (!state.isEnabling()) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span> return false;<a name="line.125"></a>
+<span class="sourceLineNo">126</span> }<a name="line.126"></a>
+<span class="sourceLineNo">127</span> Thread.sleep(SLEEP_INTERVAL_MS);<a name="line.127"></a>
+<span class="sourceLineNo">128</span> } catch (TableStateNotFoundException e) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span> return false;<a name="line.129"></a>
+<span class="sourceLineNo">130</span> } catch (InterruptedException e) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> throw (IOException) new InterruptedIOException(e.getMessage()).initCause(e);<a name="line.131"></a>
+<span class="sourceLineNo">132</span> }<a name="line.132"></a>
+<span class="sourceLineNo">133</span> }<a name="line.133"></a>
+<span class="sourceLineNo">134</span> }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span> // will be override in test to simulate error<a name="line.136"></a>
+<span class="sourceLineNo">137</span> @VisibleForTesting<a name="line.137"></a>
+<span class="sourceLineNo">138</span> protected void reopenRegions(MasterProcedureEnv env) throws IOException {<a name="line.138"></a>
+<span class="sourceLineNo">139</span> ReplicationPeerConfig peerConfig = getNewPeerConfig();<a name="line.139"></a>
+<span class="sourceLineNo">140</span> ReplicationPeerConfig oldPeerConfig = getOldPeerConfig();<a name="line.140"></a>
+<span class="sourceLineNo">141</span> TableStateManager tsm = env.getMasterServices().getTableStateManager();<a name="line.141"></a>
+<span class="sourceLineNo">142</span> for (TableDescriptor td : env.getMasterServices().getTableDescriptors().getAll().values()) {<a name="line.142"></a>
+<span class="sourceLineNo">143</span> if (!td.hasGlobalReplicationScope()) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span> continue;<a name="line.144"></a>
+<span class="sourceLineNo">145</span> }<a name="line.145"></a>
+<span class="sourceLineNo">146</span> TableName tn = td.getTableName();<a name="line.146"></a>
+<span class="sourceLineNo">147</span> if (!ReplicationUtils.contains(peerConfig, tn)) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> continue;<a name="line.148"></a>
+<span class="sourceLineNo">149</span> }<a name="line.149"></a>
+<span class="sourceLineNo">150</span> if (oldPeerConfig != null && oldPeerConfig.isSerial() &&<a name="line.150"></a>
+<span class="sourceLineNo">151</span> ReplicationUtils.contains(oldPeerConfig, tn)) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span> continue;<a name="line.152"></a>
+<span class="sourceLineNo">153</span> }<a name="line.153"></a>
+<span class="sourceLineNo">154</span> if (needReopen(tsm, tn)) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span> addChildProcedure(new ReopenTableRegionsProcedure(tn));<a name="line.155"></a>
+<span class="sourceLineNo">156</span> }<a name="line.156"></a>
+<span class="sourceLineNo">157</span> }<a name="line.157"></a>
+<span class="sourceLineNo">158</span> }<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span> @Override<a name="line.160"></a>
+<span class="sourceLineNo">161</span> protected Flow executeFromState(MasterProcedureEnv env, PeerModificationState state)<a name="line.161"></a>
+<span class="sourceLineNo">162</span> throws ProcedureSuspendedException, InterruptedException {<a name="line.162"></a>
+<span class="sourceLineNo">163</span> switch (state) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> case PRE_PEER_MODIFICATION:<a name="line.164"></a>
+<span class="sourceLineNo">165</span> try {<a name="line.165"></a>
+<span class="sourceLineNo">166</span> prePeerModification(env);<a name="line.166"></a>
+<span class="sourceLineNo">167</span> } catch (IOException e) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span> LOG.warn("{} failed to call pre CP hook or the pre check is failed for peer {}, " +<a name="line.168"></a>
+<span class="sourceLineNo">169</span> "mark the procedure as failure and give up", getClass().getName(), peerId, e);<a name="line.169"></a>
+<span class="sourceLineNo">170</span> setFailure("master-" + getPeerOperationType().name().toLowerCase() + "-peer", e);<a name="line.170"></a>
+<span class="sourceLineNo">171</span> releaseLatch(env);<a name="line.171"></a>
+<span class="sourceLineNo">172</span> return Flow.NO_MORE_STATE;<a name="line.172"></a>
+<span class="sourceLineNo">173</span> } catch (ReplicationException e) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> throw suspend(env.getMasterConfiguration(),<a name="line.174"></a>
+<span class="sourceLineNo">175</span> backoff -> LOG.warn("{} failed to call prePeerModification for peer {}, sleep {} secs",<a name="line.175"></a>
+<span class="sourceLineNo">176</span> getClass().getName(), peerId, backoff / 1000, e));<a name="line.176"></a>
+<span class="sourceLineNo">177</span> }<a name="line.177"></a>
+<span class="sourceLineNo">178</span> resetRetry();<a name="line.178"></a>
+<span class="sourceLineNo">179</span> setNextState(PeerModificationState.UPDATE_PEER_STORAGE);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> return Flow.HAS_MORE_STATE;<a name="line.180"></a>
+<span class="sourceLineNo">181</span> case UPDATE_PEER_STORAGE:<a name="line.181"></a>
+<span class="sourceLineNo">182</span> try {<a name="line.182"></a>
+<span class="sourceLineNo">183</span> updatePeerStorage(env);<a name="line.183"></a>
+<span class="sourceLineNo">184</span> } catch (ReplicationException e) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span> throw suspend(env.getMasterConfiguration(),<a name="line.185"></a>
+<span class="sourceLineNo">186</span> backoff -> LOG.warn("{} update peer storage for peer {} failed, sleep {} secs",<a name="line.186"></a>
+<span class="sourceLineNo">187</span> getClass().getName(), peerId, backoff / 1000, e));<a name="line.187"></a>
+<span class="sourceLineNo">188</span> }<a name="line.188"></a>
+<span class="sourceLineNo">189</span> resetRetry();<a name="line.189"></a>
+<span class="sourceLineNo">190</span> setNextState(PeerModificationState.REFRESH_PEER_ON_RS);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> return Flow.HAS_MORE_STATE;<a name="line.191"></a>
+<span class="sourceLineNo">192</span> case REFRESH_PEER_ON_RS:<a name="line.192"></a>
+<span class="sourceLineNo">193</span> refreshPeer(env, getPeerOperationType());<a name="line.193"></a>
+<span class="sourceLineNo">194</span> setNextState(nextStateAfterRefresh());<a name="line.194"></a>
+<span class="sourceLineNo">195</span> return Flow.HAS_MORE_STATE;<a name="line.195"></a>
+<span class="sourceLineNo">196</span> case SERIAL_PEER_REOPEN_REGIONS:<a name="line.196"></a>
+<span class="sourceLineNo">197</span> try {<a name="line.197"></a>
+<span class="sourceLineNo">198</span> reopenRegions(env);<a name="line.198"></a>
+<span class="sourceLineNo">199</span> } catch (Exception e) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span> throw suspend(env.getMasterConfiguration(),<a name="line.200"></a>
+<span class="sourceLineNo">201</span> backoff -> LOG.warn("{} reopen regions for peer {} failed, sleep {} secs",<a name="line.201"></a>
+<span class="sourceLineNo">202</span> getClass().getName(), peerId, backoff / 1000, e));<a name="line.202"></a>
+<span class="sourceLineNo">203</span> }<a name="line.203"></a>
+<span class="sourceLineNo">204</span> resetRetry();<a name="line.204"></a>
+<span class="sourceLineNo">205</span> setNextState(PeerModificationState.SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> return Flow.HAS_MORE_STATE;<a name="line.206"></a>
+<span class="sourceLineNo">207</span> case SERIAL_PEER_UPDATE_LAST_PUSHED_SEQ_ID:<a name="line.207"></a>
+<span class="sourceLineNo">208</span> try {<a name="line.208"></a>
+<span class="sourceLineNo">209</span> updateLastPushedSequenceIdForSerialPeer(env);<a name="line.209"></a>
+<span class="sourceLineNo">210</span> } catch (Exception e) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span> throw suspend(env.getMasterConfiguration(),<a name="line.211"></a>
+<span class="sourceLineNo">212</span> backoff -> LOG.warn("{} set last sequence id for peer {} failed, sleep {} secs",<a name="line.212"></a>
+<span class="sourceLineNo">213</span> getClass().getName(), peerId, backoff / 1000, e));<a name="line.213"></a>
+<span class="sourceLineNo">214</span> }<a name="line.214"></a>
+<span class="sourceLineNo">215</span> resetRetry();<a name="line.215"></a>
+<span class="sourceLineNo">216</span> setNextState(enablePeerBeforeFinish() ? PeerModificationState.SERIAL_PEER_SET_PEER_ENABLED<a name="line.216"></a>
+<span class="sourceLineNo">217</span> : PeerModificationState.POST_PEER_MODIFICATION);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> return Flow.HAS_MORE_STATE;<a name="line.218"></a>
+<span class="sourceLineNo">219</span> case SERIAL_PEER_SET_PEER_ENABLED:<a name="line.219"></a>
+<span class="sourceLineNo">220</span> try {<a name="line.220"></a>
+<span class="sourceLineNo">221</span> enablePeer(env);<a name="line.221"></a>
+<span class="sourceLineNo">222</span> } catch (ReplicationException e) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span> throw suspend(env.getMasterConfiguration(),<a name="line.223"></a>
+<span class="sourceLineNo">224</span> backoff -> LOG.warn("{} enable peer before finish for peer {} failed, sleep {} secs",<a name="line.224"></a>
+<span class="sourceLineNo">225</span> getClass().getName(), peerId, backoff / 1000, e));<a name="line.225"></a>
+<span class="sourceLineNo">226</span> }<a name="line.226"></a>
+<span class="sourceLineNo">227</span> resetRetry();<a name="line.227"></a>
+<span class="sourceLineNo">228</span> setNextState(PeerModificationState.SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS);<a name="line.228"></a>
+<span class="sourceLineNo">229</span> return Flow.HAS_MORE_STATE;<a name="line.229"></a>
+<span class="sourceLineNo">230</span> case SERIAL_PEER_ENABLE_PEER_REFRESH_PEER_ON_RS:<a name="line.230"></a>
+<span class="sourceLineNo">231</span> refreshPeer(env, PeerOperationType.ENABLE);<a name="line.231"></a>
+<span class="sourceLineNo">232</span> setNextState(PeerModificationState.POST_PEER_MODIFICATION);<a name="line.232"></a>
+<span class="sourceLineNo">233</span> return Flow.HAS_MORE_STATE;<a name="line.233"></a>
+<span class="sourceLineNo">234</span> case POST_PEER_MODIFICATION:<a name="line.234"></a>
+<span class="sourceLineNo">235</span> try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span> postPeerModification(env);<a name="line.236"></a>
+<span class="sourceLineNo">237</span> } catch (ReplicationException e) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span> throw suspend(env.getMasterConfiguration(),<a name="line.238"></a>
+<span class="sourceLineNo">239</span> backoff -> LOG.warn(<a name="line.239"></a>
+<span class="sourceLineNo">240</span> "{} failed to call postPeerModification for peer {}, sleep {} secs",<a name="line.240"></a>
+<span class="sourceLineNo">241</span> getClass().getName(), peerId, backoff / 1000, e));<a name="line.241"></a>
+<span class="sourceLineNo">242</span> } catch (IOException e) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span> LOG.warn("{} failed to call post CP hook for peer {}, " +<a name="line.243"></a>
+<span class="sourceLineNo">244</span> "ignore since the procedure has already done", getClass().getName(), peerId, e);<a name="line.244"></a>
+<span class="sourceLineNo">245</span> }<a name="line.245"></a>
+<span class="sourceLineNo">246</span> releaseLatch(env);<a name="line.246"></a>
+<span class="sourceLineNo">247</span> return Flow.NO_MORE_STATE;<a name="line.247"></a>
+<span class="sourceLineNo">248</span> default:<a name="line.248"></a>
+<span class="sourceLineNo">249</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.249"></a>
+<span class="sourceLineNo">250</span> }<a name="line.250"></a>
+<span class="sourceLineNo">251</span> }<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span> @Override<a name="line.253"></a>
+<span class="sourceLineNo">254</span> protected PeerModificationState getState(int stateId) {<a name="line.254"></a>
+<span class="sourceLineNo">255</span> return PeerModificationState.forNumber(stateId);<a name="line.255"></a>
+<span class="sourceLineNo">256</span> }<a name="line.256"></a>
+<span class="sourceLineNo">257</span><a name="line.257"></a>
+<span class="sourceLineNo">258</span> @Override<a name="line.258"></a>
+<span class="sourceLineNo">259</span> protected int getStateId(PeerModificationState state) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span> return state.getNumber();<a name="line.260"></a>
+<span class="sourceLineNo">261</span> }<a name="line.261"></a>
+<span class="sourceLineNo">262</span><a name="line.262"></a>
+<span class="sourceLineNo">263</span> @Override<a name="line.263"></a>
+<span class="sourceLineNo">264</span> protected PeerModificationState getInitialState() {<a name="line.264"></a>
+<span class="sourceLineNo">265</span> return PeerModificationState.PRE_PEER_MODIFICATION;<a name="line.265"></a>
+<span class="sourceLineNo">266</span> }<a name="line.266"></a>
+<span class="sourceLineNo">267</span>}<a name="line.267"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html
index 18f1cc8..77c4ea1 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/SyncReplicationReplayWALProcedure.html
@@ -31,138 +31,136 @@
<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.Logger;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALStateData;<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * The procedure for replaying a set of remote wals. It will get an available region server and<a name="line.36"></a>
-<span class="sourceLineNo">037</span> * schedule a {@link SyncReplicationReplayWALRemoteProcedure} to actually send the request to region<a name="line.37"></a>
-<span class="sourceLineNo">038</span> * server.<a name="line.38"></a>
-<span class="sourceLineNo">039</span> */<a name="line.39"></a>
-<span class="sourceLineNo">040</span>@InterfaceAudience.Private<a name="line.40"></a>
-<span class="sourceLineNo">041</span>public class SyncReplicationReplayWALProcedure<a name="line.41"></a>
-<span class="sourceLineNo">042</span> extends AbstractPeerNoLockProcedure<SyncReplicationReplayWALState> {<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span> private static final Logger LOG =<a name="line.44"></a>
-<span class="sourceLineNo">045</span> LoggerFactory.getLogger(SyncReplicationReplayWALProcedure.class);<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span> private ServerName worker = null;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span> private List<String> wals;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span> public SyncReplicationReplayWALProcedure() {<a name="line.51"></a>
-<span class="sourceLineNo">052</span> }<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span> public SyncReplicationReplayWALProcedure(String peerId, List<String> wals) {<a name="line.54"></a>
-<span class="sourceLineNo">055</span> this.peerId = peerId;<a name="line.55"></a>
-<span class="sourceLineNo">056</span> this.wals = wals;<a name="line.56"></a>
-<span class="sourceLineNo">057</span> }<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span> @Override<a name="line.59"></a>
-<span class="sourceLineNo">060</span> protected Flow executeFromState(MasterProcedureEnv env, SyncReplicationReplayWALState state)<a name="line.60"></a>
-<span class="sourceLineNo">061</span> throws ProcedureSuspendedException {<a name="line.61"></a>
-<span class="sourceLineNo">062</span> SyncReplicationReplayWALManager syncReplicationReplayWALManager =<a name="line.62"></a>
-<span class="sourceLineNo">063</span> env.getMasterServices().getSyncReplicationReplayWALManager();<a name="line.63"></a>
-<span class="sourceLineNo">064</span> switch (state) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span> case ASSIGN_WORKER:<a name="line.65"></a>
-<span class="sourceLineNo">066</span> worker = syncReplicationReplayWALManager.acquirePeerWorker(peerId, this);<a name="line.66"></a>
-<span class="sourceLineNo">067</span> setNextState(SyncReplicationReplayWALState.DISPATCH_WALS_TO_WORKER);<a name="line.67"></a>
-<span class="sourceLineNo">068</span> return Flow.HAS_MORE_STATE;<a name="line.68"></a>
-<span class="sourceLineNo">069</span> case DISPATCH_WALS_TO_WORKER:<a name="line.69"></a>
-<span class="sourceLineNo">070</span> addChildProcedure(new SyncReplicationReplayWALRemoteProcedure(peerId, wals, worker));<a name="line.70"></a>
-<span class="sourceLineNo">071</span> setNextState(SyncReplicationReplayWALState.RELEASE_WORKER);<a name="line.71"></a>
-<span class="sourceLineNo">072</span> return Flow.HAS_MORE_STATE;<a name="line.72"></a>
-<span class="sourceLineNo">073</span> case RELEASE_WORKER:<a name="line.73"></a>
-<span class="sourceLineNo">074</span> boolean finished = false;<a name="line.74"></a>
-<span class="sourceLineNo">075</span> try {<a name="line.75"></a>
-<span class="sourceLineNo">076</span> finished = syncReplicationReplayWALManager.isReplayWALFinished(wals.get(0));<a name="line.76"></a>
-<span class="sourceLineNo">077</span> } catch (IOException e) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span> long backoff = ProcedureUtil.getBackoffTimeMs(attempts);<a name="line.78"></a>
-<span class="sourceLineNo">079</span> LOG.warn("Failed to check whether replay wals {} finished for peer id={}" +<a name="line.79"></a>
-<span class="sourceLineNo">080</span> ", sleep {} secs and retry", wals, peerId, backoff / 1000, e);<a name="line.80"></a>
-<span class="sourceLineNo">081</span> throw suspend(backoff);<a name="line.81"></a>
-<span class="sourceLineNo">082</span> }<a name="line.82"></a>
-<span class="sourceLineNo">083</span> syncReplicationReplayWALManager.releasePeerWorker(peerId, worker,<a name="line.83"></a>
-<span class="sourceLineNo">084</span> env.getProcedureScheduler());<a name="line.84"></a>
-<span class="sourceLineNo">085</span> if (!finished) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span> LOG.warn("Failed to replay wals {} for peer id={}, retry", wals, peerId);<a name="line.86"></a>
-<span class="sourceLineNo">087</span> setNextState(SyncReplicationReplayWALState.ASSIGN_WORKER);<a name="line.87"></a>
-<span class="sourceLineNo">088</span> return Flow.HAS_MORE_STATE;<a name="line.88"></a>
-<span class="sourceLineNo">089</span> }<a name="line.89"></a>
-<span class="sourceLineNo">090</span> return Flow.NO_MORE_STATE;<a name="line.90"></a>
-<span class="sourceLineNo">091</span> default:<a name="line.91"></a>
-<span class="sourceLineNo">092</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.92"></a>
-<span class="sourceLineNo">093</span> }<a name="line.93"></a>
-<span class="sourceLineNo">094</span> }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span> @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span> protected void rollbackState(MasterProcedureEnv env, SyncReplicationReplayWALState state)<a name="line.97"></a>
-<span class="sourceLineNo">098</span> throws IOException, InterruptedException {<a name="line.98"></a>
-<span class="sourceLineNo">099</span> if (state == getInitialState()) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span> return;<a name="line.100"></a>
-<span class="sourceLineNo">101</span> }<a name="line.101"></a>
-<span class="sourceLineNo">102</span> throw new UnsupportedOperationException();<a name="line.102"></a>
-<span class="sourceLineNo">103</span> }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span> @Override<a name="line.105"></a>
-<span class="sourceLineNo">106</span> protected SyncReplicationReplayWALState getState(int state) {<a name="line.106"></a>
-<span class="sourceLineNo">107</span> return SyncReplicationReplayWALState.forNumber(state);<a name="line.107"></a>
-<span class="sourceLineNo">108</span> }<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span> @Override<a name="line.110"></a>
-<span class="sourceLineNo">111</span> protected int getStateId(SyncReplicationReplayWALState state) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span> return state.getNumber();<a name="line.112"></a>
-<span class="sourceLineNo">113</span> }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span> @Override<a name="line.115"></a>
-<span class="sourceLineNo">116</span> protected SyncReplicationReplayWALState getInitialState() {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> return SyncReplicationReplayWALState.ASSIGN_WORKER;<a name="line.117"></a>
-<span class="sourceLineNo">118</span> }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span> @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.121"></a>
-<span class="sourceLineNo">122</span> super.serializeStateData(serializer);<a name="line.122"></a>
-<span class="sourceLineNo">123</span> SyncReplicationReplayWALStateData.Builder builder =<a name="line.123"></a>
-<span class="sourceLineNo">124</span> SyncReplicationReplayWALStateData.newBuilder().setPeerId(peerId).addAllWal(wals);<a name="line.124"></a>
-<span class="sourceLineNo">125</span> if (worker != null) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span> builder.setWorker(ProtobufUtil.toServerName(worker));<a name="line.126"></a>
-<span class="sourceLineNo">127</span> }<a name="line.127"></a>
-<span class="sourceLineNo">128</span> serializer.serialize(builder.build());<a name="line.128"></a>
-<span class="sourceLineNo">129</span> }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span> @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.132"></a>
-<span class="sourceLineNo">133</span> super.deserializeStateData(serializer);<a name="line.133"></a>
-<span class="sourceLineNo">134</span> SyncReplicationReplayWALStateData data =<a name="line.134"></a>
-<span class="sourceLineNo">135</span> serializer.deserialize(SyncReplicationReplayWALStateData.class);<a name="line.135"></a>
-<span class="sourceLineNo">136</span> peerId = data.getPeerId();<a name="line.136"></a>
-<span class="sourceLineNo">137</span> wals = data.getWalList();<a name="line.137"></a>
-<span class="sourceLineNo">138</span> if (data.hasWorker()) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span> worker = ProtobufUtil.toServerName(data.getWorker());<a name="line.139"></a>
-<span class="sourceLineNo">140</span> }<a name="line.140"></a>
-<span class="sourceLineNo">141</span> }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span> @Override<a name="line.143"></a>
-<span class="sourceLineNo">144</span> public PeerOperationType getPeerOperationType() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span> return PeerOperationType.SYNC_REPLICATION_REPLAY_WAL;<a name="line.145"></a>
-<span class="sourceLineNo">146</span> }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span> @Override<a name="line.148"></a>
-<span class="sourceLineNo">149</span> protected void afterReplay(MasterProcedureEnv env) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> // If the procedure is not finished and the worker is not null, we should add it to the used<a name="line.150"></a>
-<span class="sourceLineNo">151</span> // worker set, to prevent the worker being used by others.<a name="line.151"></a>
-<span class="sourceLineNo">152</span> if (worker != null && !isFinished()) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span> env.getMasterServices().getSyncReplicationReplayWALManager().addUsedPeerWorker(peerId,<a name="line.153"></a>
-<span class="sourceLineNo">154</span> worker);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> }<a name="line.155"></a>
-<span class="sourceLineNo">156</span> }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>}<a name="line.157"></a>
+<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.slf4j.Logger;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.slf4j.LoggerFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALState;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.SyncReplicationReplayWALStateData;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>/**<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * The procedure for replaying a set of remote wals. It will get an available region server and<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * schedule a {@link SyncReplicationReplayWALRemoteProcedure} to actually send the request to region<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * server.<a name="line.37"></a>
+<span class="sourceLineNo">038</span> */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
+<span class="sourceLineNo">040</span>public class SyncReplicationReplayWALProcedure<a name="line.40"></a>
+<span class="sourceLineNo">041</span> extends AbstractPeerNoLockProcedure<SyncReplicationReplayWALState> {<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span> private static final Logger LOG =<a name="line.43"></a>
+<span class="sourceLineNo">044</span> LoggerFactory.getLogger(SyncReplicationReplayWALProcedure.class);<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span> private ServerName worker = null;<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span> private List<String> wals;<a name="line.48"></a>
+<span class="sourceLineNo">049</span><a name="line.49"></a>
+<span class="sourceLineNo">050</span> public SyncReplicationReplayWALProcedure() {<a name="line.50"></a>
+<span class="sourceLineNo">051</span> }<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span> public SyncReplicationReplayWALProcedure(String peerId, List<String> wals) {<a name="line.53"></a>
+<span class="sourceLineNo">054</span> this.peerId = peerId;<a name="line.54"></a>
+<span class="sourceLineNo">055</span> this.wals = wals;<a name="line.55"></a>
+<span class="sourceLineNo">056</span> }<a name="line.56"></a>
+<span class="sourceLineNo">057</span><a name="line.57"></a>
+<span class="sourceLineNo">058</span> @Override<a name="line.58"></a>
+<span class="sourceLineNo">059</span> protected Flow executeFromState(MasterProcedureEnv env, SyncReplicationReplayWALState state)<a name="line.59"></a>
+<span class="sourceLineNo">060</span> throws ProcedureSuspendedException {<a name="line.60"></a>
+<span class="sourceLineNo">061</span> SyncReplicationReplayWALManager syncReplicationReplayWALManager =<a name="line.61"></a>
+<span class="sourceLineNo">062</span> env.getMasterServices().getSyncReplicationReplayWALManager();<a name="line.62"></a>
+<span class="sourceLineNo">063</span> switch (state) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span> case ASSIGN_WORKER:<a name="line.64"></a>
+<span class="sourceLineNo">065</span> worker = syncReplicationReplayWALManager.acquirePeerWorker(peerId, this);<a name="line.65"></a>
+<span class="sourceLineNo">066</span> setNextState(SyncReplicationReplayWALState.DISPATCH_WALS_TO_WORKER);<a name="line.66"></a>
+<span class="sourceLineNo">067</span> return Flow.HAS_MORE_STATE;<a name="line.67"></a>
+<span class="sourceLineNo">068</span> case DISPATCH_WALS_TO_WORKER:<a name="line.68"></a>
+<span class="sourceLineNo">069</span> addChildProcedure(new SyncReplicationReplayWALRemoteProcedure(peerId, wals, worker));<a name="line.69"></a>
+<span class="sourceLineNo">070</span> setNextState(SyncReplicationReplayWALState.RELEASE_WORKER);<a name="line.70"></a>
+<span class="sourceLineNo">071</span> return Flow.HAS_MORE_STATE;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> case RELEASE_WORKER:<a name="line.72"></a>
+<span class="sourceLineNo">073</span> boolean finished = false;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> try {<a name="line.74"></a>
+<span class="sourceLineNo">075</span> finished = syncReplicationReplayWALManager.isReplayWALFinished(wals.get(0));<a name="line.75"></a>
+<span class="sourceLineNo">076</span> } catch (IOException e) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span> throw suspend(env.getMasterConfiguration(),<a name="line.77"></a>
+<span class="sourceLineNo">078</span> backoff -> LOG.warn("Failed to check whether replay wals {} finished for peer id={}" +<a name="line.78"></a>
+<span class="sourceLineNo">079</span> ", sleep {} secs and retry", wals, peerId, backoff / 1000, e));<a name="line.79"></a>
+<span class="sourceLineNo">080</span> }<a name="line.80"></a>
+<span class="sourceLineNo">081</span> syncReplicationReplayWALManager.releasePeerWorker(peerId, worker,<a name="line.81"></a>
+<span class="sourceLineNo">082</span> env.getProcedureScheduler());<a name="line.82"></a>
+<span class="sourceLineNo">083</span> if (!finished) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span> LOG.warn("Failed to replay wals {} for peer id={}, retry", wals, peerId);<a name="line.84"></a>
+<span class="sourceLineNo">085</span> setNextState(SyncReplicationReplayWALState.ASSIGN_WORKER);<a name="line.85"></a>
+<span class="sourceLineNo">086</span> return Flow.HAS_MORE_STATE;<a name="line.86"></a>
+<span class="sourceLineNo">087</span> }<a name="line.87"></a>
+<span class="sourceLineNo">088</span> return Flow.NO_MORE_STATE;<a name="line.88"></a>
+<span class="sourceLineNo">089</span> default:<a name="line.89"></a>
+<span class="sourceLineNo">090</span> throw new UnsupportedOperationException("unhandled state=" + state);<a name="line.90"></a>
+<span class="sourceLineNo">091</span> }<a name="line.91"></a>
+<span class="sourceLineNo">092</span> }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span> @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span> protected void rollbackState(MasterProcedureEnv env, SyncReplicationReplayWALState state)<a name="line.95"></a>
+<span class="sourceLineNo">096</span> throws IOException, InterruptedException {<a name="line.96"></a>
+<span class="sourceLineNo">097</span> if (state == getInitialState()) {<a name="line.97"></a>
+<span class="sourceLineNo">098</span> return;<a name="line.98"></a>
+<span class="sourceLineNo">099</span> }<a name="line.99"></a>
+<span class="sourceLineNo">100</span> throw new UnsupportedOperationException();<a name="line.100"></a>
+<span class="sourceLineNo">101</span> }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span> @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span> protected SyncReplicationReplayWALState getState(int state) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span> return SyncReplicationReplayWALState.forNumber(state);<a name="line.105"></a>
+<span class="sourceLineNo">106</span> }<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span> @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span> protected int getStateId(SyncReplicationReplayWALState state) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span> return state.getNumber();<a name="line.110"></a>
+<span class="sourceLineNo">111</span> }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span> @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span> protected SyncReplicationReplayWALState getInitialState() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span> return SyncReplicationReplayWALState.ASSIGN_WORKER;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span> @Override<a name="line.118"></a>
+<span class="sourceLineNo">119</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> super.serializeStateData(serializer);<a name="line.120"></a>
+<span class="sourceLineNo">121</span> SyncReplicationReplayWALStateData.Builder builder =<a name="line.121"></a>
+<span class="sourceLineNo">122</span> SyncReplicationReplayWALStateData.newBuilder().setPeerId(peerId).addAllWal(wals);<a name="line.122"></a>
+<span class="sourceLineNo">123</span> if (worker != null) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span> builder.setWorker(ProtobufUtil.toServerName(worker));<a name="line.124"></a>
+<span class="sourceLineNo">125</span> }<a name="line.125"></a>
+<span class="sourceLineNo">126</span> serializer.serialize(builder.build());<a name="line.126"></a>
+<span class="sourceLineNo">127</span> }<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> @Override<a name="line.129"></a>
+<span class="sourceLineNo">130</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.130"></a>
+<span class="sourceLineNo">131</span> super.deserializeStateData(serializer);<a name="line.131"></a>
+<span class="sourceLineNo">132</span> SyncReplicationReplayWALStateData data =<a name="line.132"></a>
+<span class="sourceLineNo">133</span> serializer.deserialize(SyncReplicationReplayWALStateData.class);<a name="line.133"></a>
+<span class="sourceLineNo">134</span> peerId = data.getPeerId();<a name="line.134"></a>
+<span class="sourceLineNo">135</span> wals = data.getWalList();<a name="line.135"></a>
+<span class="sourceLineNo">136</span> if (data.hasWorker()) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span> worker = ProtobufUtil.toServerName(data.getWorker());<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span> }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span> @Override<a name="line.141"></a>
+<span class="sourceLineNo">142</span> public PeerOperationType getPeerOperationType() {<a name="line.142"></a>
+<span class="sourceLineNo">143</span> return PeerOperationType.SYNC_REPLICATION_REPLAY_WAL;<a name="line.143"></a>
+<span class="sourceLineNo">144</span> }<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span> @Override<a name="line.146"></a>
+<span class="sourceLineNo">147</span> protected void afterReplay(MasterProcedureEnv env) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span> // If the procedure is not finished and the worker is not null, we should add it to the used<a name="line.148"></a>
+<span class="sourceLineNo">149</span> // worker set, to prevent the worker being used by others.<a name="line.149"></a>
+<span class="sourceLineNo">150</span> if (worker != null && !isFinished()) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span> env.getMasterServices().getSyncReplicationReplayWALManager().addUsedPeerWorker(peerId,<a name="line.151"></a>
+<span class="sourceLineNo">152</span> worker);<a name="line.152"></a>
+<span class="sourceLineNo">153</span> }<a name="line.153"></a>
+<span class="sourceLineNo">154</span> }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>}<a name="line.155"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
index a17aad6..edbe6b6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/replication/TransitPeerSyncReplicationStateProcedure.html
@@ -36,365 +36,359 @@
<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.master.procedure.ReopenTableRegionsProcedure;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.procedure2.ProcedureStateSerializer;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.procedure2.ProcedureSuspendedException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.procedure2.ProcedureUtil;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.ReplicationException;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationPeerDescription;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.PeerSyncReplicationStateTransitionState;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProcedureProtos.TransitPeerSyncReplicationStateStateData;<a name="line.43"></a>
-<span class="sourceLineNo">044</span><a name="line.44"></a>
-<span class="sourceLineNo">045</span>/**<a name="line.45"></a>
-<span class="sourceLineNo">046</span> * The procedure for transit current sync replication state for a synchronous replication peer.<a name="line.46"></a>
-<span class="sourceLineNo">047</span> */<a name="line.47"></a>
-<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
-<span class="sourceLineNo">049</span>public class TransitPeerSyncReplicationStateProcedure<a name="line.49"></a>
-<span class="sourceLineNo">050</span> extends AbstractPeerProcedure<PeerSyncReplicationStateTransitionState> {<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span> private static final Logger LOG =<a name="line.52"></a>
-<span class="sourceLineNo">053</span> LoggerFactory.getLogger(TransitPeerSyncReplicationStateProcedure.class);<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span> protected SyncReplicationState fromState;<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span> private SyncReplicationState toState;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span> private boolean enabled;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span> private boolean serial;<a name="line.61"></a>
-<span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span> public TransitPeerSyncReplicationStateProcedure() {<a name="line.63"></a>
-<span class="sourceLineNo">064</span> }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span> public TransitPeerSyncReplicationStateProcedure(String peerId, SyncReplicationState state) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span> super(peerId);<a name="line.67"></a>
-<span class="sourceLineNo">068</span> this.toState = state;<a name="line.68"></a>
-<span class="sourceLineNo">069</span> }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span> @Override<a name="line.71"></a>
-<span class="sourceLineNo">072</span> public PeerOperationType getPeerOperationType() {<a name="line.72"></a>
-<span class="sourceLineNo">073</span> return PeerOperationType.TRANSIT_SYNC_REPLICATION_STATE;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> }<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span> @Override<a name="line.76"></a>
-<span class="sourceLineNo">077</span> protected void serializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.77"></a>
-<span class="sourceLineNo">078</span> super.serializeStateData(serializer);<a name="line.78"></a>
-<span class="sourceLineNo">079</span> TransitPeerSyncReplicationStateStateData.Builder builder =<a name="line.79"></a>
-<span class="sourceLineNo">080</span> TransitPeerSyncReplicationStateStateData.newBuilder()<a name="line.80"></a>
-<span class="sourceLineNo">081</span> .setToState(ReplicationPeerConfigUtil.toSyncReplicationState(toState));<a name="line.81"></a>
-<span class="sourceLineNo">082</span> if (fromState != null) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span> builder.setFromState(ReplicationPeerConfigUtil.toSyncReplicationState(fromState));<a name="line.83"></a>
-<span class="sourceLineNo">084</span> }<a name="line.84"></a>
-<span class="sourceLineNo">085</span> serializer.serialize(builder.build());<a name="line.85"></a>
-<span class="sourceLineNo">086</span> }<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span> @Override<a name="line.88"></a>
-<span class="sourceLineNo">089</span> protected void deserializeStateData(ProcedureStateSerializer serializer) throws IOException {<a name="line.89"></a>
-<span class="sourceLineNo">090</span> super.deserializeStateData(serializer);<a name="line.90"></a>
-<span class="sourceLineNo">091</span> TransitPeerSyncReplicationStateStateData data =<a name="line.91"></a>
-<span class="sourceLineNo">092</span> serializer.deserialize(TransitPeerSyncReplicationStateStateData.class);<a name="line.92"></a>
-<span class="sourceLineNo">093</span> toState = ReplicationPeerConfigUtil.toSyncReplicationState(data.getToState());<a name="line.93"></a>
-<span class="sourceLineNo">094</span> if (data.hasFromState()) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span> fromState = ReplicationPeerConfigUtil.toSyncReplicationState(data.getFromState());<a name="line.95"></a>
-<span class="sourceLineNo">096</span> }<a name="line.96"></a>
-<span class="sourceLineNo">097</span> }<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span> @Override<a name="line.99"></a>
-<span class="sourceLineNo">100</span> protected PeerSyncReplicationStateTransitionState getState(int stateId) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span> return PeerSyncReplicationStateTransitionState.forNumber(stateId);<a name="line.101"></a>
-<span class="sourceLineNo">102</span> }<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span> @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span> protected int getStateId(PeerSyncReplicationStateTransitionState state) {<a name="line.105"></a>
-<span class="sourceLineNo">106</span> return state.getNumber();<a name="line.106"></a>
-<span class="sourceLineNo">107</span> }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span> @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span> protected PeerSyncReplicationStateTransitionState getInitialState() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span> return PeerSyncReplicationStateTransitionState.PRE_PEER_SYNC_REPLICATION_STATE_TRANSITION;<a name="line.111"></a>
-<span class="sourceLineNo">112</span> }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span> @VisibleForTesting<a name="line.114"></a>
-<span class="sourceLineNo">115</span> protected void preTransit(MasterProcedureEnv env) throws IOException {<a name="line.115"></a>
-<span class="sourceLineNo">116</span> MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.116"></a>
-<span class="sourceLineNo">117</span> if (cpHost != null) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span> cpHost.preTransitReplicationPeerSyncReplicationState(peerId, toState);<a name="line.118"></a>
-<span class="sourceLineNo">119</span> }<a name="line.119"></a>
-<span class="sourceLineNo">120</span> ReplicationPeerDescription desc =<a name="line.120"></a>
-<span class="sourceLineNo">121</span> env.getReplicationPeerManager().preTransitPeerSyncReplicationState(peerId, toState);<a name="line.121"></a>
-<span class="sourceLineNo">122</span> if (toState == SyncReplicationState.ACTIVE) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> Path remoteWALDirForPeer =<a name="line.123"></a>
-<span class="sourceLineNo">124</span> ReplicationUtils.getPeerRemoteWALDir(desc.getPeerConfig().getRemoteWALDir(), peerId);<a name="line.124"></a>
-<span class="sourceLineNo">125</span> // check whether the remote wal directory is present<a name="line.125"></a>
-<span class="sourceLineNo">126</span> if (!remoteWALDirForPeer.getFileSystem(env.getMasterConfiguration())<a name="line.126"></a>
-<span class="sourceLineNo">127</span> .exists(remoteWALDirForPeer)) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span> throw new DoNotRetryIOException(<a name="line.128"></a>
-<span class="sourceLineNo">129</span> "The remote WAL directory " + remoteWALDirForPeer + " does not exist");<a name="line.129"></a>
-<span class="sourceLineNo">130</span> }<a name="line.130"></a>
-<span class="sourceLineNo">131</span> }<a name="line.131"></a>
-<span class="sourceLineNo">132</span> fromState = desc.getSyncReplicationState();<a name="line.132"></a>
-<span class="sourceLineNo">133</span> enabled = desc.isEnabled();<a name="line.133"></a>
-<span class="sourceLineNo">134</span> serial = desc.getPeerConfig().isSerial();<a name="line.134"></a>
-<span class="sourceLineNo">135</span> }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span> private void postTransit(MasterProcedureEnv env) throws IOException {<a name="line.137"></a>
-<span class="sourceLineNo">138</span> LOG.info(<a name="line.138"></a>
-<span class="sourceLineNo">139</span> "Successfully transit current cluster state from {} to {} for sync replication peer {}",<a name="line.139"></a>
-<span class="sourceLineNo">140</span> fromState, toState, peerId);<a name="line.140"></a>
-<span class="sourceLineNo">141</span> MasterCoprocessorHost cpHost = env.getMasterCoprocessorHost();<a name="line.141"></a>
-<span class="sourceLineNo">142</span> if (cpHost != null) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span> env.getMasterCoprocessorHost().postTransitReplicationPeerSyncReplicationState(peerId,<a name="line.143"></a>
-<span class="sourceLineNo">144</span> fromState, toState);<a name="line.144"></a>
-<span class="sourceLineNo">145</span> }<a name="line.145"></a>
-<span class="sourceLineNo">146</span> }<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span> @VisibleForTesting<a name="line.148"></a>
-<span class="sourceLineNo">149</span> protected void reopenRegions(MasterProcedureEnv env) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> addChildProcedure(<a name="line.150"></a>
-<span class="sourceLineNo">151</span> env.getReplicationPeerManager().getPeerConfig(peerId).get().getTableCFsMap().keySet().stream()<a name="line.151"></a>
-<span class="sourceLineNo">152</span> .map(ReopenTableRegionsProcedure::new).toArray(ReopenTableRegionsProcedure[]::new));<a name="line.152"></a>
-<span class="sourceLineNo">153</span> }<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span> @VisibleForTesting<a name="line.155"></a>
-<span class="sourceLineNo">156</span> protected void createDirForRemoteWAL(MasterProcedureEnv env) throws IOException {<a name="line.156"></a>
-<span class="sourceLineNo">157</span> MasterFileSystem mfs = env.getMasterFileSystem();<a name="line.157"></a>
-<span class="sourceLineNo">158</span> Path remoteWALDir = new Path(mfs.getWALRootDir(), ReplicationUtils.REMOTE_WAL_DIR_NAME);<a name="line.158"></a>
-<span class="sourceLineNo">159</span> Path remoteWALDirForPeer = ReplicationUtils.getPeerRemoteWALDir(remoteWALDir, peerId);<a name="line.159"></a>
-<span class="sourceLineNo">160</span> FileSystem walFs = mfs.getWALFileSystem();<a name="line.160"></a>
-<span class="sourceLineNo">161</span> if (walFs.exists(remoteWALDirForPeer)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> LOG.warn("Wal dir {} already exists, usually this should not happen, continue anyway",<a name="line.162"></a>
-<span class="sourceLineNo">163</span> remoteWALDirForPeer);<a name="line.163"></a>
-<span class="sourceLineNo">164</span> } else if (!walFs.mkdirs(remoteWALDirForPeer)) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span> throw new IOException("Failed to create remote wal dir " + remoteWALDirForPeer);<a name="line.165"></a>
-<span class="sourceLineNo">166</span> }<a name="line.166"></a>
-<span class="sourceLineNo">167</span> }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span> private void setNextStateAfterRefreshBegin() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> if (fromState.equals(SyncReplicationState.ACTIVE)) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span> setNextState(toState.equals(SyncReplicationState.STANDBY)<a name="line.171"></a>
-<span class="sourceLineNo">172</span> ? PeerSyncReplicationStateTransitionState.REMOVE_ALL_REPLICATION_QUEUES_IN_PEER<a name="line.172"></a>
-<span class="sourceLineNo">173</span> : PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER);<a name="line.173"></a>
-<span class="sourceLineNo">174</span> } else if (fromState.equals(SyncReplicationState.DOWNGRADE_ACTIVE)) {<a name="line.174"></a>
-<span class="sourceLineNo">175</span> setNextState(toState.equals(SyncReplicationState.STANDBY)<a name="line.175"></a>
-<span class="sourceLineNo">176</span> ? PeerSyncReplicationStateTransitionState.REMOVE_ALL_REPLICATION_QUEUES_IN_PEER<a name="line.176"></a>
-<span class="sourceLineNo">177</span> : PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> } else {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> assert toState.equals(SyncReplicationState.DOWNGRADE_ACTIVE);<a name="line.179"></a>
-<span class="sourceLineNo">180</span> // for serial peer, we need to reopen all the regions and then update the last pushed sequence<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // id, before replaying any remote wals, so that the serial replication will not be stuck, and<a name="line.181"></a>
-<span class="sourceLineNo">182</span> // also guarantee the order when replicating the remote wal back.<a name="line.182"></a>
-<span class="sourceLineNo">183</span> setNextState(serial ? PeerSyncReplicationStateTransitionState.REOPEN_ALL_REGIONS_IN_PEER<a name="line.183"></a>
-<span class="sourceLineNo">184</span> : PeerSyncReplicationStateTransitionState.REPLAY_REMOTE_WAL_IN_PEER);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> }<a name="line.185"></a>
... 23457 lines suppressed ...