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 2020/10/12 20:21:30 UTC

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

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 284ecf7  Published site at c28220522d71edfde3424d0413cd19a5bdff6e60.
284ecf7 is described below

commit 284ecf79e94ff7f018966c0513389cf2215269fc
Author: jenkins <bu...@apache.org>
AuthorDate: Mon Oct 12 20:21:08 2020 +0000

    Published site at c28220522d71edfde3424d0413cd19a5bdff6e60.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 .../hadoop/hbase/mapreduce/WALInputFormat.html     |    2 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |  280 +-
 checkstyle.rss                                     |    4 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/constant-values.html                    |   11 +-
 devapidocs/index-all.html                          |    8 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/client/package-tree.html   |   22 +-
 .../hadoop/hbase/coprocessor/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/executor/package-tree.html |    2 +-
 .../hbase/favored/FavoredNodeLoadBalancer.html     |   51 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |    6 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |    2 +-
 .../hadoop/hbase/hbtop/terminal/package-tree.html  |    2 +-
 .../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       |    6 +-
 .../apache/hadoop/hbase/master/LoadBalancer.html   |   35 +-
 .../hbase/master/assignment/AssignmentManager.html |   10 +-
 .../BaseLoadBalancer.Cluster.Action.Type.html      |   14 +-
 .../balancer/BaseLoadBalancer.Cluster.Action.html  |   10 +-
 ...aseLoadBalancer.Cluster.AssignRegionAction.html |   12 +-
 .../BaseLoadBalancer.Cluster.LocalityType.html     |   10 +-
 .../BaseLoadBalancer.Cluster.MoveRegionAction.html |   14 +-
 ...BaseLoadBalancer.Cluster.SwapRegionsAction.html |   16 +-
 .../master/balancer/BaseLoadBalancer.Cluster.html  |  150 +-
 .../BaseLoadBalancer.DefaultRackManager.html       |    6 +-
 .../hbase/master/balancer/BaseLoadBalancer.html    |  134 +-
 ...edStochasticBalancer.FavoredNodeLoadPicker.html |   12 +-
 ...ochasticBalancer.FavoredNodeLocalityPicker.html |   10 +-
 .../master/balancer/FavoredStochasticBalancer.html |   63 +-
 .../apache/hadoop/hbase/master/package-tree.html   |    8 +-
 .../hbase/master/procedure/package-tree.html       |    4 +-
 .../hadoop/hbase/monitoring/package-tree.html      |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   18 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    4 +-
 .../hbase/procedure2/store/wal/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |    4 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   18 +-
 .../regionserver/querymatcher/package-tree.html    |    2 +-
 .../hbase/regionserver/wal/AbstractFSWAL.html      |    2 +-
 .../hadoop/hbase/regionserver/wal/AsyncFSWAL.html  |    7 -
 .../hbase/regionserver/wal/DualAsyncFSWAL.html     |    7 -
 .../hadoop/hbase/regionserver/wal/FSHLog.html      |    7 -
 .../hbase/regionserver/wal/package-tree.html       |    4 +-
 .../hadoop/hbase/replication/package-tree.html     |    2 +-
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.html    |   84 +-
 .../hadoop/hbase/security/access/package-tree.html |    6 +-
 .../apache/hadoop/hbase/security/package-tree.html |    4 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |    8 +-
 ...stractFSWALProvider.WALStartTimeComparator.html |    8 +-
 .../hadoop/hbase/wal/AbstractFSWALProvider.html    |  129 +-
 .../hadoop/hbase/wal/AsyncFSWALProvider.html       |    2 +-
 .../hbase/wal/DisabledWALProvider.DisabledWAL.html |    2 +-
 .../apache/hadoop/hbase/wal/FSHLogProvider.html    |    2 +-
 .../org/apache/hadoop/hbase/wal/WAL.Entry.html     |   16 +-
 .../org/apache/hadoop/hbase/wal/WAL.Reader.html    |   12 +-
 devapidocs/org/apache/hadoop/hbase/wal/WAL.html    |  105 +-
 .../org/apache/hadoop/hbase/wal/class-use/WAL.html |    2 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../hbase/favored/FavoredNodeLoadBalancer.html     |  835 ++---
 .../WALInputFormat.WALKeyRecordReader.html         |    2 +-
 .../mapreduce/WALInputFormat.WALRecordReader.html  |    2 +-
 .../hbase/mapreduce/WALInputFormat.WALSplit.html   |    2 +-
 .../hadoop/hbase/mapreduce/WALInputFormat.html     |    2 +-
 .../apache/hadoop/hbase/master/LoadBalancer.html   |  125 +-
 ...ignmentManager.DeadServerMetricRegionChore.html |  236 +-
 .../AssignmentManager.RegionInTransitionChore.html |  236 +-
 .../AssignmentManager.RegionInTransitionStat.html  |  236 +-
 ...AssignmentManager.RegionMetaLoadingVisitor.html |  236 +-
 .../hbase/master/assignment/AssignmentManager.html |  236 +-
 .../BaseLoadBalancer.Cluster.Action.Type.html      | 3339 ++++++++++----------
 .../balancer/BaseLoadBalancer.Cluster.Action.html  | 3339 ++++++++++----------
 ...aseLoadBalancer.Cluster.AssignRegionAction.html | 3339 ++++++++++----------
 .../BaseLoadBalancer.Cluster.LocalityType.html     | 3339 ++++++++++----------
 .../BaseLoadBalancer.Cluster.MoveRegionAction.html | 3339 ++++++++++----------
 ...BaseLoadBalancer.Cluster.SwapRegionsAction.html | 3339 ++++++++++----------
 .../master/balancer/BaseLoadBalancer.Cluster.html  | 3339 ++++++++++----------
 .../BaseLoadBalancer.DefaultRackManager.html       | 3339 ++++++++++----------
 .../hbase/master/balancer/BaseLoadBalancer.html    | 3339 ++++++++++----------
 ...edStochasticBalancer.FavoredNodeLoadPicker.html | 1416 ++++-----
 ...ochasticBalancer.FavoredNodeLocalityPicker.html | 1416 ++++-----
 .../master/balancer/FavoredStochasticBalancer.html | 1416 ++++-----
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.html    |  903 +++---
 .../hbase/wal/AbstractFSWALProvider.Reader.html    |  658 ++--
 ...stractFSWALProvider.WALStartTimeComparator.html |  658 ++--
 .../hadoop/hbase/wal/AbstractFSWALProvider.html    |  658 ++--
 .../org/apache/hadoop/hbase/wal/WAL.Entry.html     |  565 ++--
 .../org/apache/hadoop/hbase/wal/WAL.Reader.html    |  565 ++--
 .../src-html/org/apache/hadoop/hbase/wal/WAL.html  |  565 ++--
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-tracking.html                                |    2 +-
 mail-lists.html                                    |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 project-summary.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 source-repository.html                             |    2 +-
 sponsors.html                                      |    2 +-
 supportingprojects.html                            |    2 +-
 team-list.html                                     |    2 +-
 .../hbase/TestZooKeeper.MockLoadBalancer.html      |   13 +-
 .../org/apache/hadoop/hbase/TestZooKeeper.html     |   36 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   16 +-
 .../hadoop/hbase/procedure/package-tree.html       |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    4 +-
 .../TestFailedAppendAndSync.DodgyFSLog.html        |    7 -
 .../regionserver/TestWALLockup.DodgyFSLog.html     |    7 -
 .../hadoop/hbase/regionserver/package-tree.html    |    6 +-
 .../wal/AbstractTestWALReplay.MockWAL.html         |    7 -
 .../hbase/regionserver/wal/CustomAsyncFSWAL.html   |    7 -
 .../hbase/regionserver/wal/CustomFSHLog.html       |    7 -
 .../hbase/replication/DualAsyncFSWALForTest.html   |    7 -
 .../org/apache/hadoop/hbase/test/package-tree.html |    4 +-
 .../org/apache/hadoop/hbase/wal/FaultyFSLog.html   |    7 -
 .../hadoop/hbase/wal/IOTestProvider.IOTestWAL.html |    7 -
 ...CorruptionDueToDanglingByteBuffer.PauseWAL.html |    7 -
 ...onDueToDanglingByteBuffer.PauseWALProvider.html |    2 +-
 ...CorruptionDueToDanglingByteBuffer.PauseWAL.html |    7 -
 ...onDueToDanglingByteBuffer.PauseWALProvider.html |    2 +-
 ...tRaceBetweenGetWALAndGetWALs.FSWALProvider.html |    2 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../hbase/TestZooKeeper.MockLoadBalancer.html      |  535 ++--
 .../org/apache/hadoop/hbase/TestZooKeeper.html     |  535 ++--
 144 files changed, 21835 insertions(+), 21862 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index d224296..99369dd 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -467,7 +467,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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 9fb017f..53d2410 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.rc.2, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20201011200538+00'00')
-/CreationDate (D:20201011201706+00'00')
+/ModDate (D:20201012200638+00'00')
+/CreationDate (D:20201012201751+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html
index 89d67be..4d7e8d0 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html
@@ -344,7 +344,7 @@
 <span class="sourceLineNo">336</span><a name="line.336"></a>
 <span class="sourceLineNo">337</span>  static void addFile(List&lt;FileStatus&gt; result, LocatedFileStatus lfs, long startTime,<a name="line.337"></a>
 <span class="sourceLineNo">338</span>      long endTime) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long timestamp = WAL.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
+<span class="sourceLineNo">339</span>    long timestamp = AbstractFSWALProvider.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
 <span class="sourceLineNo">340</span>    if (timestamp &gt; 0) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      // Looks like a valid timestamp.<a name="line.341"></a>
 <span class="sourceLineNo">342</span>      if (timestamp &lt;= endTime &amp;&amp; timestamp &gt;= startTime) {<a name="line.342"></a>
diff --git a/book.html b/book.html
index afdf235..276722c 100644
--- a/book.html
+++ b/book.html
@@ -46090,7 +46090,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 2020-10-11 20:05:38 UTC
+Last updated 2020-10-12 20:06:38 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index 59d8048..0b709a3 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -172,7 +172,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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 d3a5065..3bde8dd 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -169,7 +169,7 @@
 <td>4319</td>
 <td>0</td>
 <td>0</td>
-<td>9235</td></tr></table></div>
+<td>9234</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -7257,7 +7257,7 @@
 <td><a href="#org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>6</td></tr>
+<td>5</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.wal.WALFactory.java">org/apache/hadoop/hbase/wal/WALFactory.java</a></td>
 <td>0</td>
@@ -7398,7 +7398,7 @@
 <li>sortStaticImportsAlphabetically: <tt>&quot;true&quot;</tt></li>
 <li>groups: <tt>&quot;*,org.apache.hbase.thirdparty,org.apache.hadoop.hbase.shaded&quot;</tt></li>
 <li>option: <tt>&quot;top&quot;</tt></li></ul></td>
-<td>751</td>
+<td>750</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
@@ -20794,19 +20794,19 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'segregateRegionsAndAssignRegionsWithFavoredNodes' has incorrect indentation level 2, expected level should be 4.</td>
-<td>245</td></tr>
+<td>248</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td>247</td></tr>
+<td>250</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>319</td></tr></table></div>
+<td>322</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.favored.FavoredNodesPromoter.java">org/apache/hadoop/hbase/favored/FavoredNodesPromoter.java</h3>
 <table border="0" class="table table-striped">
@@ -40828,361 +40828,361 @@
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
-<td>65</td></tr>
+<td>66</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
-<td>143</td></tr>
+<td>144</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>161</td></tr>
+<td>162</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>162</td></tr>
+<td>163</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>163</td></tr>
+<td>164</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 261 lines (max allowed is 150).</td>
-<td>208</td></tr>
+<td>209</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>319</td></tr>
+<td>320</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'type' must be private and have accessor methods.</td>
-<td>645</td></tr>
+<td>646</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>646</td></tr>
+<td>647</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 33 should have line break after.</td>
-<td>646</td></tr>
+<td>647</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
-<td>648</td></tr>
+<td>649</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 32 should have line break after.</td>
-<td>650</td></tr>
+<td>651</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
-<td>654</td></tr>
+<td>655</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'server' must be private and have accessor methods.</td>
-<td>655</td></tr>
+<td>656</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'region' must be private and have accessor methods.</td>
-<td>674</td></tr>
+<td>675</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
-<td>675</td></tr>
+<td>676</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
-<td>676</td></tr>
+<td>677</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>686</td></tr>
+<td>687</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromServer' must be private and have accessor methods.</td>
-<td>695</td></tr>
+<td>696</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'fromRegion' must be private and have accessor methods.</td>
-<td>696</td></tr>
+<td>697</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toServer' must be private and have accessor methods.</td>
-<td>697</td></tr>
+<td>698</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'toRegion' must be private and have accessor methods.</td>
-<td>698</td></tr>
+<td>699</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
-<td>708</td></tr>
+<td>709</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>722</td></tr>
+<td>723</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>723</td></tr>
+<td>724</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>726</td></tr>
+<td>727</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>727</td></tr>
+<td>728</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>728</td></tr>
+<td>729</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>729</td></tr>
+<td>730</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>730</td></tr>
+<td>731</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>732</td></tr>
+<td>733</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>733</td></tr>
+<td>734</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>733</td></tr>
+<td>734</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>734</td></tr>
+<td>735</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>735</td></tr>
+<td>736</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>736</td></tr>
+<td>737</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>737</td></tr>
+<td>738</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>739</td></tr>
+<td>740</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>740</td></tr>
+<td>741</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
-<td>740</td></tr>
+<td>741</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>741</td></tr>
+<td>742</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
-<td>741</td></tr>
+<td>742</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>742</td></tr>
+<td>743</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>743</td></tr>
+<td>744</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>744</td></tr>
+<td>745</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>745</td></tr>
+<td>746</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>746</td></tr>
+<td>747</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
-<td>757</td></tr>
+<td>758</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
-<td>869</td></tr>
+<td>870</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
-<td>884</td></tr>
+<td>885</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1051</td></tr>
+<td>1052</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1052</td></tr>
+<td>1053</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1054</td></tr>
+<td>1055</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1055</td></tr>
+<td>1056</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1087</td></tr>
+<td>1088</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1093</td></tr>
+<td>1094</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1116</td></tr>
+<td>1117</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1118</td></tr>
+<td>1119</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1206</td></tr>
+<td>1205</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
-<td>1417</td></tr></table></div>
+<td>1422</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</h3>
 <table border="0" class="table table-striped">
@@ -41227,13 +41227,13 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'segregateRegionsAndAssignRegionsWithFavoredNodes' has incorrect indentation level 2, expected level should be 4.</td>
-<td>202</td></tr>
+<td>205</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>244</td></tr></table></div>
+<td>247</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java</h3>
 <table border="0" class="table table-striped">
@@ -75289,10 +75289,10 @@
 <th>Line</th></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>imports</td>
-<td>ImportOrder</td>
-<td>Wrong order for 'org.apache.commons.lang3.StringUtils.isNumeric' import.</td>
-<td>35</td></tr>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>183</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
@@ -75316,23 +75316,17 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>187</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>223</td></tr></table></div>
+<td>222</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALFactory.java">org/apache/hadoop/hbase/wal/WALFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -75341,13 +75335,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALKey.java">org/apache/hadoop/hbase/wal/WALKey.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -75356,49 +75350,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALKeyImpl.java">org/apache/hadoop/hbase/wal/WALKeyImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>291</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>292</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>309</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>332</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>333</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>334</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -75407,79 +75401,79 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALPerformanceEvaluation.java">org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>173</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 193 lines (max allowed is 150).</td>
 <td>202</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>355</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>358</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>379</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>411</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>413</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>439</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>569</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>577</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>579</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -75488,37 +75482,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALSplitter.java">org/apache/hadoop/hbase/wal/WALSplitter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'edu.umd.cs.findbugs.annotations.Nullable' import.</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - edu.umd.cs.findbugs.annotations.Nullable.</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'javax.validation.constraints.Null' import.</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - javax.validation.constraints.Null.</td>
 <td>65</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -75527,13 +75521,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ReadOnlyZKClient.java">org/apache/hadoop/hbase/zookeeper/ReadOnlyZKClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -75542,25 +75536,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZKConfig.java">org/apache/hadoop/hbase/zookeeper/ZKConfig.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -75569,13 +75563,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZKMetadata.java">org/apache/hadoop/hbase/zookeeper/ZKMetadata.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -75584,13 +75578,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZKWatcher.java">org/apache/hadoop/hbase/zookeeper/ZKWatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -75599,109 +75593,109 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZNodePaths.java">org/apache/hadoop/hbase/zookeeper/ZNodePaths.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'baseZNode' must be private and have accessor methods.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'rsZNode' must be private and have accessor methods.</td>
 <td>52</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'drainingZNode' must be private and have accessor methods.</td>
 <td>54</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'masterAddressZNode' must be private and have accessor methods.</td>
 <td>56</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'backupMasterAddressesZNode' must be private and have accessor methods.</td>
 <td>58</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'clusterStateZNode' must be private and have accessor methods.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'tableZNode' must be private and have accessor methods.</td>
 <td>66</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'clusterIdZNode' must be private and have accessor methods.</td>
 <td>68</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'splitLogZNode' must be private and have accessor methods.</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'balancerZNode' must be private and have accessor methods.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'regionNormalizerZNode' must be private and have accessor methods.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'switchZNode' must be private and have accessor methods.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'masterMaintZNode' must be private and have accessor methods.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'replicationZNode' must be private and have accessor methods.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'peersZNode' must be private and have accessor methods.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'queuesZNode' must be private and have accessor methods.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -75710,13 +75704,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZooKeeperHelper.java">org/apache/hadoop/hbase/zookeeper/ZooKeeperHelper.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -75725,13 +75719,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.metrics2.lib.TestMutableRangeHistogram.java">org/apache/hadoop/metrics2/lib/TestMutableRangeHistogram.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -75745,7 +75739,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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.rss b/checkstyle.rss
index a504628..934318b 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -26,7 +26,7 @@ under the License.
     <copyright>&#169;2007 - 2020 The Apache Software Foundation</copyright>
     <item>
       <title>File: 4319,
-             Errors: 9235,
+             Errors: 9234,
              Warnings: 0,
              Infos: 0
       </title>
@@ -36105,7 +36105,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  5
                 </td>
               </tr>
                           <tr>
diff --git a/coc.html b/coc.html
index 206680d..4e55351 100644
--- a/coc.html
+++ b/coc.html
@@ -241,7 +241,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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 b5a8d3a..a498f18 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -313,7 +313,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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 d3cb2fe..e015569 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -824,7 +824,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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 df1cecf..c877338 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -194,7 +194,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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 0780de8..d420aac 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1019,7 +1019,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-11</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-10-12</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 2f5d714..5b81159 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -31997,20 +31997,27 @@
 <td class="colLast"><code>".meta"</code></td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.wal.AbstractFSWALProvider.NO_TIMESTAMP">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;long</code></td>
+<td><code><a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#NO_TIMESTAMP">NO_TIMESTAMP</a></code></td>
+<td class="colLast"><code>-1L</code></td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.wal.AbstractFSWALProvider.SEPARATE_OLDLOGDIR">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#SEPARATE_OLDLOGDIR">SEPARATE_OLDLOGDIR</a></code></td>
 <td class="colLast"><code>"hbase.separate.oldlogdir.by.regionserver"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.wal.AbstractFSWALProvider.SPLITTING_EXT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#SPLITTING_EXT">SPLITTING_EXT</a></code></td>
 <td class="colLast"><code>"-splitting"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.wal.AbstractFSWALProvider.WAL_FILE_NAME_DELIMITER">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index edcf59f..91865ea 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -31239,7 +31239,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#extractFileNumFromWAL-org.apache.hadoop.hbase.wal.WAL-">extractFileNumFromWAL(WAL)</a></span> - Static method 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>
-<div class="block">It returns the file create timestamp from the file name.</div>
+<div class="block">It returns the file create timestamp (the 'FileNum') from the file name.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/ParseFilter.html#extractFilterSimpleExpression-byte:A-int-">extractFilterSimpleExpression(byte[], int)</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/ParseFilter.html" title="class in org.apache.hadoop.hbase.filter">ParseFilter</a></dt>
 <dd>
@@ -54590,7 +54590,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/MapReduceExtendedCell.html#getTimestamp--">getTimestamp()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/MapReduceExtendedCell.html" title="class in org.apache.hadoop.hbase.util">MapReduceExtendedCell</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WAL.html#getTimestamp-java.lang.String-">getTimestamp(String)</a></span> - Static method in interface org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#getTimestamp-java.lang.String-">getTimestamp(String)</a></span> - Static method 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>
 <div class="block">Split a WAL filename to get a start time.</div>
 </dd>
@@ -81266,6 +81266,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/Procedure.html#NO_TIMEOUT">NO_TIMEOUT</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/Procedure.html" title="class in org.apache.hadoop.hbase.procedure2">Procedure</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#NO_TIMESTAMP">NO_TIMESTAMP</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>
+<div class="block">Define for when no timestamp found.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/MetricsZooKeeperSourceImpl.html#noAuthFailedOpCount">noAuthFailedOpCount</a></span> - Variable in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/MetricsZooKeeperSourceImpl.html" title="class in org.apache.hadoop.hbase.zookeeper">MetricsZooKeeperSourceImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicyFactory.NoBackoffPolicy.html#NoBackoffPolicy-org.apache.hadoop.conf.Configuration-">NoBackoffPolicy(Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.client.backoff.<a href="org/apache/hadoop/hbase/client/backoff/ClientBackoffPolicyFactory.NoBackoffPolicy.html" title="class in org.apache.hadoop.hbase.client.backoff">ClientBackoffPolicyFactory.NoBackoffPolicy</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index d82c382..c9a1ef8 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/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/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/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/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 8ab3d46..b3c5fbb 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -449,24 +449,24 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</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.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/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/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/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/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/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/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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>
-<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/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/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/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/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/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index 9a728ec..6b85449 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -182,8 +182,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index 0192935..880a54a 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html b/devapidocs/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html
index 51366c2..d54eec0 100644
--- a/devapidocs/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html
@@ -119,7 +119,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Configuration")
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.68">FavoredNodeLoadBalancer</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.70">FavoredNodeLoadBalancer</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPromoter.html" title="interface in org.apache.hadoop.hbase.favored">FavoredNodesPromoter</a></pre>
 <div class="block">An implementation of the <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master"><code>LoadBalancer</code></a> that
@@ -370,7 +370,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.69">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.71">LOG</a></pre>
 </li>
 </ul>
 <a name="rackManager">
@@ -379,7 +379,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>rackManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.71">rackManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.73">rackManager</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -388,7 +388,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.72">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.74">conf</a></pre>
 </li>
 </ul>
 <a name="fnm">
@@ -397,7 +397,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fnm</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.73">fnm</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.75">fnm</a></pre>
 </li>
 </ul>
 </li>
@@ -414,7 +414,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FavoredNodeLoadBalancer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.68">FavoredNodeLoadBalancer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.70">FavoredNodeLoadBalancer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -431,7 +431,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>setConf</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.76">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.78">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>setConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -446,7 +446,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.81">initialize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.83">initialize</a>()
                 throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#initialize--">LoadBalancer</a></code></span></div>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
@@ -466,7 +466,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.90">balanceTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title= [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.92">balanceTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title= [...]
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-">LoadBalancer</a></code></span></div>
 <div class="block">Perform the major balance operation for table, all class implement of <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master"><code>LoadBalancer</code></a>
@@ -490,9 +490,10 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" ti [...]
-                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                      throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<pre>@NonNull
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title=" [...]
+                                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                               throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">BaseLoadBalancer</a></code></span></div>
 <div class="block">Generates a bulk assignment plan to be used on cluster startup using a
  simple round-robin assignment.
@@ -513,8 +514,8 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <dd><code>regions</code> - all regions</dd>
 <dd><code>servers</code> - all servers</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>map of server to the regions it should take, or null if no
-         assignment is possible (ie. no regions or no servers)</dd>
+<dd>map of server to the regions it should take, or emptyMap if no
+         assignment is possible (ie. no servers)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></code></dd>
 </dl>
@@ -526,7 +527,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.208">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.211">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
                             throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#randomAssignment-org.apache.hadoop.hbase.client.RegionInfo-java.util.List-">BaseLoadBalancer</a></code></span></div>
@@ -549,7 +550,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>segregateRegionsAndAssignRegionsWithFavoredNodes</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" tit [...]
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" tit [...]
                                                                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;availableServers)</pre>
 </li>
 </ul>
@@ -559,7 +560,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>availableServersContains</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.283">availableServersContains</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="cl [...]
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.286">availableServersContains</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="cl [...]
                                             <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;favoredNode)</pre>
 </li>
 </ul>
@@ -569,7 +570,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>assignRegionToAvailableFavoredNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.292">assignRegionToAvailableFavoredNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.295">assignRegionToAvailableFavoredNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/ [...]
                                                 <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;primaryHost,
                                                 <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;secondaryHost,
@@ -582,7 +583,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionToMap</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.316">addRegionToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-externa [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.319">addRegionToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-externa [...]
                             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                             <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;host)</pre>
 </li>
@@ -593,7 +594,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>getFavoredNodes</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.327">getFavoredNodes</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="i [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.330">getFavoredNodes</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="i [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPromoter.html#getFavoredNodes-org.apache.hadoop.hbase.client.RegionInfo-">getFavoredNodes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPromoter.html" title="interface in org.apache.hadoop.hbase.favored">FavoredNodesPromoter</a></code></dd>
@@ -606,7 +607,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignmentImpl</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.331">roundRobinAssignmentImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodeAssignmentHelper</a>&nbsp;assignmentHelper,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.334">roundRobinAssignmentImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodeAssignmentHelper</a>&nbsp;assignmentHelper,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/clien [...]
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
@@ -623,7 +624,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>assignSecondaryAndTertiaryNodesForRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.340">assignSecondaryAndTertiaryNodesForRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodeAssignmentHelper</a>&nbsp;assignmentHelper,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.343">assignSecondaryAndTertiaryNodesForRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodeAssignmentHelper</a>&nbsp;assignmentHelper,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;primaryRSMap)
                                                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>
@@ -639,7 +640,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>generateFavoredNodesForDaughter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.379">generateFavoredNodesForDaughter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.382">generateFavoredNodesForDaughter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                                             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
                                             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionA,
                                             <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionB)
@@ -658,7 +659,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockList">
 <li class="blockList">
 <h4>getInheritedFNForDaughter</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.409">getInheritedFNForDaughter</a>(<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodeAssi [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.412">getInheritedFNForDaughter</a>(<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodeAssi [...]
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;parentFavoredNodes,
                                                   <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPlan.Position.html" title="enum in org.apache.hadoop.hbase.favored">FavoredNodesPlan.Position</a>&nbsp;primary,
                                                   <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPlan.Position.html" title="enum in org.apache.hadoop.hbase.favored">FavoredNodesPlan.Position</a>&nbsp;secondary)
@@ -675,7 +676,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesP
 <ul class="blockListLast">
 <li class="blockList">
 <h4>generateFavoredNodesForMergedRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.434">generateFavoredNodesForMergedRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;merged,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html#line.437">generateFavoredNodesForMergedRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;merged,
                                                 <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;mergeParents)
                                          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>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 54e45b3..9c43915 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,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>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index d9bf09d..cd793c2 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
index 007e90f..b8f3866 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
@@ -107,8 +107,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/KeyPress.Type.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">KeyPress.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/Color.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">Color</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/KeyPress.Type.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">KeyPress.Type</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 6e8998a..d5349b6 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -141,8 +141,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>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.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/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/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</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 7656da5..6146c8b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -301,12 +301,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<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/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/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
 </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 e0d239b..17eaa68 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -356,9 +356,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/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/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>
+<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>
 </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 06bfd36..5fae425 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -296,11 +296,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
+<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/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/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/LoadBalancer.html b/devapidocs/org/apache/hadoop/hbase/master/LoadBalancer.html
index c45aa0f..6d8a105 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/LoadBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/LoadBalancer.html
@@ -442,9 +442,10 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignment</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interfa [...]
-                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                               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>
+<pre>@NonNull
+<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in [...]
+                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                        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">Perform a Round Robin assignment of regions.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -460,10 +461,10 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>retainAssignment</h4>
-<pre>@Nullable
-<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in [...]
-                                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                     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>
+<pre>@NonNull
+<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in [...]
+                                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                    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">Assign regions to the previously hosting region server</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -479,7 +480,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.128">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre><a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.129">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
                      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">Get a random region server from the list</div>
@@ -497,7 +498,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.133">initialize</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.134">initialize</a>()
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
 <dl>
@@ -512,7 +513,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOnline</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.138">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.139">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                   <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block">Marks the region as online at balancer.</div>
 </li>
@@ -523,7 +524,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOffline</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.143">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.144">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <div class="block">Marks the region as offline at balancer.</div>
 </li>
 </ul>
@@ -533,7 +534,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.149">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.150">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Notification that config has changed</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -547,7 +548,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>postMasterStartupInitialize</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.154">postMasterStartupInitialize</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.155">postMasterStartupInitialize</a>()</pre>
 <div class="block">If balancer needs to do initialization after Master has started up, lets do that here.</div>
 </li>
 </ul>
@@ -557,7 +558,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>updateBalancerStatus</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.157">updateBalancerStatus</a>(boolean&nbsp;status)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.158">updateBalancerStatus</a>(boolean&nbsp;status)</pre>
 </li>
 </ul>
 <a name="isTablesOnMaster-org.apache.hadoop.conf.Configuration-">
@@ -566,7 +567,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>isTablesOnMaster</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.162">isTablesOnMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.163">isTablesOnMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if Master carries regions</dd>
@@ -579,7 +580,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockList">
 <li class="blockList">
 <h4>isSystemTablesOnlyOnMaster</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.166">isSystemTablesOnlyOnMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.167">isSystemTablesOnlyOnMaster</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="isMasterCanHostUserRegions-org.apache.hadoop.conf.Configuration-">
@@ -588,7 +589,7 @@ static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/S
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isMasterCanHostUserRegions</h4>
-<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.170">isMasterCanHostUserRegions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/master/LoadBalancer.html#line.171">isMasterCanHostUserRegions</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index 796bc5df..63e7e3f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -2864,7 +2864,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addToPendingAssignment</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2203">addToPendingAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apach [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2199">addToPendingAssignment</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="../../../../../../org/apach [...]
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;pendingRegions)</pre>
 </li>
 </ul>
@@ -2874,7 +2874,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getExcludedServersForSystemTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2219">getExcludedServersForSystemTable</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2215">getExcludedServersForSystemTable</a>()</pre>
 <div class="block">Get a list of servers that this region cannot be assigned to.
  For system tables, we must assign them to a server with highest version.</div>
 </li>
@@ -2885,7 +2885,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaster</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2239">getMaster</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2235">getMaster</a>()</pre>
 </li>
 </ul>
 <a name="getRSReports--">
@@ -2894,7 +2894,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRSReports</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop [...]
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>a snapshot of rsReports</dd>
@@ -2907,7 +2907,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRegionStatesCount</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionStatesCount.html" title="class in org.apache.hadoop.hbase.client">RegionStatesCount</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2261">getRegionStatesCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionStatesCount.html" title="class in org.apache.hadoop.hbase.client">RegionStatesCount</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#line.2257">getRegionStatesCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Provide regions state count for given table.
  e.g howmany regions of give table are opened/closed/rit etc</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
index 12f3f32..689a407 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.638">BaseLoadBalancer.Cluster.Action.Type</a>
+<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.639">BaseLoadBalancer.Cluster.Action.Type</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a>&gt;</pre>
 </li>
 </ul>
@@ -216,7 +216,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>ASSIGN_REGION</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.639">ASSIGN_REGION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.640">ASSIGN_REGION</a></pre>
 </li>
 </ul>
 <a name="MOVE_REGION">
@@ -225,7 +225,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>MOVE_REGION</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.640">MOVE_REGION</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.641">MOVE_REGION</a></pre>
 </li>
 </ul>
 <a name="SWAP_REGIONS">
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SWAP_REGIONS</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.641">SWAP_REGIONS</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.642">SWAP_REGIONS</a></pre>
 </li>
 </ul>
 <a name="NULL">
@@ -243,7 +243,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NULL</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.642">NULL</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.643">NULL</a></pre>
 </li>
 </ul>
 </li>
@@ -260,7 +260,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.638">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.639">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -280,7 +280,7 @@ for (BaseLoadBalancer.Cluster.Action.Type c : BaseLoadBalancer.Cluster.Action.Ty
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.638">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface [...]
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html#line.639">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface [...]
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
index 3f92ea7..7236763 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.637">BaseLoadBalancer.Cluster.Action</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.638">BaseLoadBalancer.Cluster.Action</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">An action to move or swap a region</div>
 </li>
@@ -231,7 +231,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>type</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.645">type</a></pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.646">type</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Action</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.646">Action</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a>&nbsp;type)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.647">Action</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action.Type</a>&nbsp;type)</pre>
 </li>
 </ul>
 </li>
@@ -265,7 +265,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>undoAction</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.648">undoAction</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.649">undoAction</a>()</pre>
 <div class="block">Returns an Action which would undo this action</div>
 </li>
 </ul>
@@ -275,7 +275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.650">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#line.651">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
index e19ea0e..b0f7c89 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.653">BaseLoadBalancer.Cluster.AssignRegionAction</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.654">BaseLoadBalancer.Cluster.AssignRegionAction</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a></pre>
 </li>
 </ul>
@@ -239,7 +239,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.654">region</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.655">region</a></pre>
 </li>
 </ul>
 <a name="server">
@@ -248,7 +248,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>server</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.655">server</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.656">server</a></pre>
 </li>
 </ul>
 </li>
@@ -265,7 +265,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AssignRegionAction</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.656">AssignRegionAction</a>(int&nbsp;region,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.657">AssignRegionAction</a>(int&nbsp;region,
                           int&nbsp;server)</pre>
 </li>
 </ul>
@@ -283,7 +283,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>undoAction</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.662">undoAction</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.663">undoAction</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#undoAction--">BaseLoadBalancer.Cluster.Action</a></code></span></div>
 <div class="block">Returns an Action which would undo this action</div>
 <dl>
@@ -298,7 +298,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.668">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.AssignRegionAction.html#line.669">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
index 164ad90..2f28fc5 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.631">BaseLoadBalancer.Cluster.LocalityType</a>
+<pre>static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.632">BaseLoadBalancer.Cluster.LocalityType</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>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>&gt;</pre>
 </li>
 </ul>
@@ -210,7 +210,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>SERVER</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.632">SERVER</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.633">SERVER</a></pre>
 </li>
 </ul>
 <a name="RACK">
@@ -219,7 +219,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RACK</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.633">RACK</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.634">RACK</a></pre>
 </li>
 </ul>
 </li>
@@ -236,7 +236,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.638">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.639">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -256,7 +256,7 @@ for (BaseLoadBalancer.Cluster.LocalityType c : BaseLoadBalancer.Cluster.Locality
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.638">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interf [...]
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html#line.639">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interf [...]
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
index 55f8274..e90a311 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.673">BaseLoadBalancer.Cluster.MoveRegionAction</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.674">BaseLoadBalancer.Cluster.MoveRegionAction</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a></pre>
 </li>
 </ul>
@@ -244,7 +244,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.674">region</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.675">region</a></pre>
 </li>
 </ul>
 <a name="fromServer">
@@ -253,7 +253,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>fromServer</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.675">fromServer</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.676">fromServer</a></pre>
 </li>
 </ul>
 <a name="toServer">
@@ -262,7 +262,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toServer</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.676">toServer</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.677">toServer</a></pre>
 </li>
 </ul>
 </li>
@@ -279,7 +279,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MoveRegionAction</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.678">MoveRegionAction</a>(int&nbsp;region,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.679">MoveRegionAction</a>(int&nbsp;region,
                         int&nbsp;fromServer,
                         int&nbsp;toServer)</pre>
 </li>
@@ -298,7 +298,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>undoAction</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.685">undoAction</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.686">undoAction</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#undoAction--">BaseLoadBalancer.Cluster.Action</a></code></span></div>
 <div class="block">Returns an Action which would undo this action</div>
 <dl>
@@ -313,7 +313,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.689">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.MoveRegionAction.html#line.690">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
index 1ea25de..a2d2907 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.694">BaseLoadBalancer.Cluster.SwapRegionsAction</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.695">BaseLoadBalancer.Cluster.SwapRegionsAction</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a></pre>
 </li>
 </ul>
@@ -249,7 +249,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>fromServer</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.695">fromServer</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.696">fromServer</a></pre>
 </li>
 </ul>
 <a name="fromRegion">
@@ -258,7 +258,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>fromRegion</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.696">fromRegion</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.697">fromRegion</a></pre>
 </li>
 </ul>
 <a name="toServer">
@@ -267,7 +267,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>toServer</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.697">toServer</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.698">toServer</a></pre>
 </li>
 </ul>
 <a name="toRegion">
@@ -276,7 +276,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toRegion</h4>
-<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.698">toRegion</a></pre>
+<pre>public&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.699">toRegion</a></pre>
 </li>
 </ul>
 </li>
@@ -293,7 +293,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SwapRegionsAction</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.699">SwapRegionsAction</a>(int&nbsp;fromServer,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.700">SwapRegionsAction</a>(int&nbsp;fromServer,
                          int&nbsp;fromRegion,
                          int&nbsp;toServer,
                          int&nbsp;toRegion)</pre>
@@ -313,7 +313,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockList">
 <li class="blockList">
 <h4>undoAction</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.707">undoAction</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.708">undoAction</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#undoAction--">BaseLoadBalancer.Cluster.Action</a></code></span></div>
 <div class="block">Returns an Action which would undo this action</div>
 <dl>
@@ -328,7 +328,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseL
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.711">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.SwapRegionsAction.html#line.712">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html#toString--">toString</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
index c417e4a..f1a8a24 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.141">BaseLoadBalancer.Cluster</a>
+<pre>protected static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.142">BaseLoadBalancer.Cluster</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">An efficient array based implementation similar to ClusterState for keeping
  the status of the cluster in terms of region assignment and distribution.
@@ -583,7 +583,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>servers</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/balancer/BaseLoadBalancer.Cluster.html#line.142">servers</a></pre>
+<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/balancer/BaseLoadBalancer.Cluster.html#line.143">servers</a></pre>
 </li>
 </ul>
 <a name="hosts">
@@ -592,7 +592,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hosts</h4>
-<pre><a href="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/balancer/BaseLoadBalancer.Cluster.html#line.143">hosts</a></pre>
+<pre><a href="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/balancer/BaseLoadBalancer.Cluster.html#line.144">hosts</a></pre>
 </li>
 </ul>
 <a name="racks">
@@ -601,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>racks</h4>
-<pre><a href="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/balancer/BaseLoadBalancer.Cluster.html#line.144">racks</a></pre>
+<pre><a href="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/balancer/BaseLoadBalancer.Cluster.html#line.145">racks</a></pre>
 </li>
 </ul>
 <a name="multiServersPerHost">
@@ -610,7 +610,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>multiServersPerHost</h4>
-<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.145">multiServersPerHost</a></pre>
+<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.146">multiServersPerHost</a></pre>
 </li>
 </ul>
 <a name="tables">
@@ -619,7 +619,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tables</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.147">tables</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.148">tables</a></pre>
 </li>
 </ul>
 <a name="regions">
@@ -628,7 +628,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regions</h4>
-<pre><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/balancer/BaseLoadBalancer.Cluster.html#line.148">regions</a></pre>
+<pre><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/balancer/BaseLoadBalancer.Cluster.html#line.149">regions</a></pre>
 </li>
 </ul>
 <a name="regionLoads">
@@ -637,7 +637,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionLoads</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerRegionLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerRegionLoad</a>&gt;[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.149">regionLoads</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerRegionLoad.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerRegionLoad</a>&gt;[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.150">regionLoads</a></pre>
 </li>
 </ul>
 <a name="regionFinder">
@@ -646,7 +646,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionFinder</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.150">regionFinder</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.151">regionFinder</a></pre>
 </li>
 </ul>
 <a name="regionLocations">
@@ -655,7 +655,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionLocations</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.152">regionLocations</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.153">regionLocations</a></pre>
 </li>
 </ul>
 <a name="serverIndexToHostIndex">
@@ -664,7 +664,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverIndexToHostIndex</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.154">serverIndexToHostIndex</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.155">serverIndexToHostIndex</a></pre>
 </li>
 </ul>
 <a name="serverIndexToRackIndex">
@@ -673,7 +673,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverIndexToRackIndex</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.155">serverIndexToRackIndex</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.156">serverIndexToRackIndex</a></pre>
 </li>
 </ul>
 <a name="regionsPerServer">
@@ -682,7 +682,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsPerServer</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.157">regionsPerServer</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.158">regionsPerServer</a></pre>
 </li>
 </ul>
 <a name="serverIndexToRegionsOffset">
@@ -691,7 +691,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverIndexToRegionsOffset</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.158">serverIndexToRegionsOffset</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.159">serverIndexToRegionsOffset</a></pre>
 </li>
 </ul>
 <a name="regionsPerHost">
@@ -700,7 +700,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsPerHost</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.159">regionsPerHost</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.160">regionsPerHost</a></pre>
 </li>
 </ul>
 <a name="regionsPerRack">
@@ -709,7 +709,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsPerRack</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.160">regionsPerRack</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.161">regionsPerRack</a></pre>
 </li>
 </ul>
 <a name="primariesOfRegionsPerServer">
@@ -718,7 +718,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>primariesOfRegionsPerServer</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.161">primariesOfRegionsPerServer</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.162">primariesOfRegionsPerServer</a></pre>
 </li>
 </ul>
 <a name="primariesOfRegionsPerHost">
@@ -727,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>primariesOfRegionsPerHost</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.162">primariesOfRegionsPerHost</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.163">primariesOfRegionsPerHost</a></pre>
 </li>
 </ul>
 <a name="primariesOfRegionsPerRack">
@@ -736,7 +736,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>primariesOfRegionsPerRack</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.163">primariesOfRegionsPerRack</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.164">primariesOfRegionsPerRack</a></pre>
 </li>
 </ul>
 <a name="serversPerHost">
@@ -745,7 +745,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serversPerHost</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.165">serversPerHost</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.166">serversPerHost</a></pre>
 </li>
 </ul>
 <a name="serversPerRack">
@@ -754,7 +754,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serversPerRack</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.166">serversPerRack</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.167">serversPerRack</a></pre>
 </li>
 </ul>
 <a name="regionIndexToServerIndex">
@@ -763,7 +763,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionIndexToServerIndex</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.167">regionIndexToServerIndex</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.168">regionIndexToServerIndex</a></pre>
 </li>
 </ul>
 <a name="initialRegionIndexToServerIndex">
@@ -772,7 +772,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initialRegionIndexToServerIndex</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.168">initialRegionIndexToServerIndex</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.169">initialRegionIndexToServerIndex</a></pre>
 </li>
 </ul>
 <a name="regionIndexToTableIndex">
@@ -781,7 +781,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionIndexToTableIndex</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.169">regionIndexToTableIndex</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.170">regionIndexToTableIndex</a></pre>
 </li>
 </ul>
 <a name="numRegionsPerServerPerTable">
@@ -790,7 +790,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numRegionsPerServerPerTable</h4>
-<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.170">numRegionsPerServerPerTable</a></pre>
+<pre>int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.171">numRegionsPerServerPerTable</a></pre>
 </li>
 </ul>
 <a name="numMaxRegionsPerTable">
@@ -799,7 +799,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numMaxRegionsPerTable</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.171">numMaxRegionsPerTable</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.172">numMaxRegionsPerTable</a></pre>
 </li>
 </ul>
 <a name="regionIndexToPrimaryIndex">
@@ -808,7 +808,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionIndexToPrimaryIndex</h4>
-<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.172">regionIndexToPrimaryIndex</a></pre>
+<pre>int[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.173">regionIndexToPrimaryIndex</a></pre>
 </li>
 </ul>
 <a name="hasRegionReplicas">
@@ -817,7 +817,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionReplicas</h4>
-<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.173">hasRegionReplicas</a></pre>
+<pre>boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.174">hasRegionReplicas</a></pre>
 </li>
 </ul>
 <a name="serverIndicesSortedByRegionCount">
@@ -826,7 +826,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverIndicesSortedByRegionCount</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.175">serverIndicesSortedByRegionCount</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.176">serverIndicesSortedByRegionCount</a></pre>
 </li>
 </ul>
 <a name="serverIndicesSortedByLocality">
@@ -835,7 +835,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverIndicesSortedByLocality</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.176">serverIndicesSortedByLocality</a></pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.177">serverIndicesSortedByLocality</a></pre>
 </li>
 </ul>
 <a name="serversToIndex">
@@ -844,7 +844,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serversToIndex</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balance [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/net/Address.html" title="class in org.apache.hadoop.hbase.net">Address</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balance [...]
 </li>
 </ul>
 <a name="hostsToIndex">
@@ -853,7 +853,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>hostsToIndex</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
 </li>
 </ul>
 <a name="racksToIndex">
@@ -862,7 +862,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>racksToIndex</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
 </li>
 </ul>
 <a name="tablesToIndex">
@@ -871,7 +871,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>tablesToIndex</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
 </li>
 </ul>
 <a name="regionsToIndex">
@@ -880,7 +880,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsToIndex</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbas [...]
 </li>
 </ul>
 <a name="localityPerServer">
@@ -889,7 +889,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>localityPerServer</h4>
-<pre>float[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.183">localityPerServer</a></pre>
+<pre>float[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.184">localityPerServer</a></pre>
 </li>
 </ul>
 <a name="numServers">
@@ -898,7 +898,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numServers</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.185">numServers</a></pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.186">numServers</a></pre>
 </li>
 </ul>
 <a name="numHosts">
@@ -907,7 +907,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numHosts</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.186">numHosts</a></pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.187">numHosts</a></pre>
 </li>
 </ul>
 <a name="numRacks">
@@ -916,7 +916,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numRacks</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.187">numRacks</a></pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.188">numRacks</a></pre>
 </li>
 </ul>
 <a name="numTables">
@@ -925,7 +925,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numTables</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.188">numTables</a></pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.189">numTables</a></pre>
 </li>
 </ul>
 <a name="numRegions">
@@ -934,7 +934,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numRegions</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.189">numRegions</a></pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.190">numRegions</a></pre>
 </li>
 </ul>
 <a name="numMovedRegions">
@@ -943,7 +943,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numMovedRegions</h4>
-<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.191">numMovedRegions</a></pre>
+<pre>int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.192">numMovedRegions</a></pre>
 </li>
 </ul>
 <a name="clusterState">
@@ -952,7 +952,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterState</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="i [...]
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="i [...]
 </li>
 </ul>
 <a name="rackManager">
@@ -961,7 +961,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rackManager</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.194">rackManager</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.195">rackManager</a></pre>
 </li>
 </ul>
 <a name="rackLocalities">
@@ -970,7 +970,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rackLocalities</h4>
-<pre>private&nbsp;float[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.196">rackLocalities</a></pre>
+<pre>private&nbsp;float[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.197">rackLocalities</a></pre>
 </li>
 </ul>
 <a name="regionsToMostLocalEntities">
@@ -979,7 +979,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsToMostLocalEntities</h4>
-<pre>private&nbsp;int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.198">regionsToMostLocalEntities</a></pre>
+<pre>private&nbsp;int[][] <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.199">regionsToMostLocalEntities</a></pre>
 </li>
 </ul>
 <a name="NullAction">
@@ -988,7 +988,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>NullAction</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.718">NullAction</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.719">NullAction</a></pre>
 </li>
 </ul>
 <a name="numRegionsComparator">
@@ -997,7 +997,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>numRegionsComparator</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.953">numRegionsComparator</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.954">numRegionsComparator</a></pre>
 </li>
 </ul>
 </li>
@@ -1014,7 +1014,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>Cluster</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.200">Cluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-externa [...]
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.201">Cluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-externa [...]
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase [...]
                   <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a>&nbsp;regionFinder,
                   <a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a>&nbsp;rackManager)</pre>
@@ -1026,7 +1026,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Cluster</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.209">Cluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;unassignedRegions,
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.210">Cluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;unassignedRegions,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.h [...]
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase [...]
                   <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a>&nbsp;regionFinder,
@@ -1047,7 +1047,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>registerRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.477">registerRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.478">registerRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                             int&nbsp;regionIndex,
                             int&nbsp;serverIndex,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/ha [...]
@@ -1061,7 +1061,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverHasTooFewRegions</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.519">serverHasTooFewRegions</a>(int&nbsp;server)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.520">serverHasTooFewRegions</a>(int&nbsp;server)</pre>
 <div class="block">Returns true iff a given server has less regions than the balanced amount</div>
 </li>
 </ul>
@@ -1071,7 +1071,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrComputeRackLocalities</h4>
-<pre>public&nbsp;float[][]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.529">getOrComputeRackLocalities</a>()</pre>
+<pre>public&nbsp;float[][]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.530">getOrComputeRackLocalities</a>()</pre>
 <div class="block">Retrieves and lazily initializes a field storing the locality of
  every region/server combination</div>
 </li>
@@ -1082,7 +1082,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrComputeRegionsToMostLocalEntities</h4>
-<pre>public&nbsp;int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.540">getOrComputeRegionsToMostLocalEntities</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>&nbsp;type)</pre>
+<pre>public&nbsp;int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.541">getOrComputeRegionsToMostLocalEntities</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>&nbsp;type)</pre>
 <div class="block">Lazily initializes and retrieves a mapping of region -> server for which region has
  the highest the locality</div>
 </li>
@@ -1093,7 +1093,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrComputeLocality</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.551">getOrComputeLocality</a>(int&nbsp;region,
+<pre>public&nbsp;float&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.552">getOrComputeLocality</a>(int&nbsp;region,
                                   int&nbsp;entity,
                                   <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>&nbsp;type)</pre>
 <div class="block">Looks up locality from cache of localities. Will create cache if it does
@@ -1106,7 +1106,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrComputeWeightedLocality</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.566">getOrComputeWeightedLocality</a>(int&nbsp;region,
+<pre>public&nbsp;double&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.567">getOrComputeWeightedLocality</a>(int&nbsp;region,
                                            int&nbsp;server,
                                            <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.LocalityType</a>&nbsp;type)</pre>
 <div class="block">Returns locality weighted by region size in MB. Will create locality cache
@@ -1119,7 +1119,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionSizeMB</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.573">getRegionSizeMB</a>(int&nbsp;region)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.574">getRegionSizeMB</a>(int&nbsp;region)</pre>
 <div class="block">Returns the size in MB from the most recent RegionLoad for region</div>
 </li>
 </ul>
@@ -1129,7 +1129,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>computeCachedLocalities</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.587">computeCachedLocalities</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.588">computeCachedLocalities</a>()</pre>
 <div class="block">Computes and caches the locality for each region/rack combinations,
  as well as storing a mapping of region -> server and region -> rack such that server
  and rack have the highest locality for region</div>
@@ -1141,7 +1141,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRackForRegion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.627">getRackForRegion</a>(int&nbsp;region)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.628">getRackForRegion</a>(int&nbsp;region)</pre>
 <div class="block">Maps region index to rack index</div>
 </li>
 </ul>
@@ -1151,7 +1151,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doAction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.720">doAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;action)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.721">doAction</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;action)</pre>
 </li>
 </ul>
 <a name="wouldLowerAvailability-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">
@@ -1160,7 +1160,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>wouldLowerAvailability</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.755">wouldLowerAvailability</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.756">wouldLowerAvailability</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 <div class="block">Return true if the placement of region on server would lower the availability
  of the region in question</div>
@@ -1176,7 +1176,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doAssignRegion</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.818">doAssignRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.819">doAssignRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                     <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName)</pre>
 </li>
 </ul>
@@ -1186,7 +1186,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionMoved</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.827">regionMoved</a>(int&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.828">regionMoved</a>(int&nbsp;region,
                  int&nbsp;oldServer,
                  int&nbsp;newServer)</pre>
 </li>
@@ -1197,7 +1197,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRegion</h4>
-<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.894">removeRegion</a>(int[]&nbsp;regions,
+<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.895">removeRegion</a>(int[]&nbsp;regions,
                    int&nbsp;regionIndex)</pre>
 </li>
 </ul>
@@ -1207,7 +1207,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegion</h4>
-<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.908">addRegion</a>(int[]&nbsp;regions,
+<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.909">addRegion</a>(int[]&nbsp;regions,
                 int&nbsp;regionIndex)</pre>
 </li>
 </ul>
@@ -1217,7 +1217,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionSorted</h4>
-<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.915">addRegionSorted</a>(int[]&nbsp;regions,
+<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.916">addRegionSorted</a>(int[]&nbsp;regions,
                       int&nbsp;regionIndex)</pre>
 </li>
 </ul>
@@ -1227,7 +1227,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>replaceRegion</h4>
-<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.930">replaceRegion</a>(int[]&nbsp;regions,
+<pre>int[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.931">replaceRegion</a>(int[]&nbsp;regions,
                     int&nbsp;regionIndex,
                     int&nbsp;newRegionIndex)</pre>
 </li>
@@ -1238,7 +1238,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>sortServersByRegionCount</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.941">sortServersByRegionCount</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.942">sortServersByRegionCount</a>()</pre>
 </li>
 </ul>
 <a name="getNumRegions-int-">
@@ -1247,7 +1247,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumRegions</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.945">getNumRegions</a>(int&nbsp;server)</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.946">getNumRegions</a>(int&nbsp;server)</pre>
 </li>
 </ul>
 <a name="contains-int:A-int-">
@@ -1256,7 +1256,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>contains</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.949">contains</a>(int[]&nbsp;arr,
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.950">contains</a>(int[]&nbsp;arr,
                  int&nbsp;val)</pre>
 </li>
 </ul>
@@ -1266,7 +1266,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getLowestLocalityRegionOnServer</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.955">getLowestLocalityRegionOnServer</a>(int&nbsp;serverIndex)</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.956">getLowestLocalityRegionOnServer</a>(int&nbsp;serverIndex)</pre>
 </li>
 </ul>
 <a name="getLocalityOfRegion-int-int-">
@@ -1275,7 +1275,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getLocalityOfRegion</h4>
-<pre>float&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.993">getLocalityOfRegion</a>(int&nbsp;region,
+<pre>float&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.994">getLocalityOfRegion</a>(int&nbsp;region,
                           int&nbsp;server)</pre>
 </li>
 </ul>
@@ -1285,7 +1285,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setNumRegions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.1003">setNumRegions</a>(int&nbsp;numRegions)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.1004">setNumRegions</a>(int&nbsp;numRegions)</pre>
 </li>
 </ul>
 <a name="setNumMovedRegions-int-">
@@ -1294,7 +1294,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setNumMovedRegions</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.1008">setNumMovedRegions</a>(int&nbsp;numMovedRegions)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.1009">setNumMovedRegions</a>(int&nbsp;numMovedRegions)</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -1303,7 +1303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.1015">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#line.1016">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
index fe88f69..ba0a7c9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.100">BaseLoadBalancer.DefaultRackManager</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.101">BaseLoadBalancer.DefaultRackManager</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a></pre>
 </li>
 </ul>
@@ -214,7 +214,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DefaultRackManager</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html#line.100">DefaultRackManager</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html#line.101">DefaultRackManager</a>()</pre>
 </li>
 </ul>
 </li>
@@ -231,7 +231,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRack</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html#line.102">getRack</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.DefaultRackManager.html#line.103">getRack</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html#getRack-org.apache.hadoop.hbase.ServerName-">RackManager</a></code></span></div>
 <div class="block">Get the name of the rack containing a server, according to the DNS to
  switch mapping.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
index a0b1170..af6a787 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.77">BaseLoadBalancer</a>
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.78">BaseLoadBalancer</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/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a></pre>
 <div class="block">The base class for load balancers. It provides the the functions used to by
@@ -533,7 +533,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>BALANCER_DECISION_BUFFER_ENABLED</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.79">BALANCER_DECISION_BUFFER_ENABLED</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.80">BALANCER_DECISION_BUFFER_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED">Constant Field Values</a></dd>
@@ -546,7 +546,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_BALANCER_DECISION_BUFFER_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.81">DEFAULT_BALANCER_DECISION_BUFFER_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.82">DEFAULT_BALANCER_DECISION_BUFFER_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED">Constant Field Values</a></dd>
@@ -559,7 +559,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>MIN_SERVER_BALANCE</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.83">MIN_SERVER_BALANCE</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.84">MIN_SERVER_BALANCE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.MIN_SERVER_BALANCE">Constant Field Values</a></dd>
@@ -572,7 +572,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>stopped</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.84">stopped</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.85">stopped</a></pre>
 </li>
 </ul>
 <a name="EMPTY_REGION_LIST">
@@ -581,7 +581,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>EMPTY_REGION_LIST</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.86">EMPTY_REGION_LIST</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.87">EMPTY_REGION_LIST</a></pre>
 </li>
 </ul>
 <a name="IDLE_SERVER_PREDICATOR">
@@ -590,7 +590,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>IDLE_SERVER_PREDICATOR</h4>
-<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.88">IDLE_SERVER_PREDICATOR</a></pre>
+<pre>static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html?is-external=true" title="class or interface in java.util.function">Predicate</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerMetrics.html" title="interface in org.apache.hadoop.hbase">ServerMetrics</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.89">IDLE_SERVER_PREDICATOR</a></pre>
 </li>
 </ul>
 <a name="regionFinder">
@@ -599,7 +599,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>regionFinder</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.91">regionFinder</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.92">regionFinder</a></pre>
 </li>
 </ul>
 <a name="useRegionFinder">
@@ -608,7 +608,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>useRegionFinder</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.92">useRegionFinder</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.93">useRegionFinder</a></pre>
 </li>
 </ul>
 <a name="isByTable">
@@ -617,7 +617,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>isByTable</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.93">isByTable</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.94">isByTable</a></pre>
 </li>
 </ul>
 <a name="namedQueueRecorder">
@@ -626,7 +626,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>namedQueueRecorder</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.98">namedQueueRecorder</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.99">namedQueueRecorder</a></pre>
 <div class="block">Use to add balancer decision history to ring-buffer</div>
 </li>
 </ul>
@@ -636,7 +636,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>slop</h4>
-<pre>protected&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1033">slop</a></pre>
+<pre>protected&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1034">slop</a></pre>
 </li>
 </ul>
 <a name="overallSlop">
@@ -645,7 +645,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>overallSlop</h4>
-<pre>protected&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1035">overallSlop</a></pre>
+<pre>protected&nbsp;float <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1036">overallSlop</a></pre>
 </li>
 </ul>
 <a name="config">
@@ -654,7 +654,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>config</h4>
-<pre>protected&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1036">config</a></pre>
+<pre>protected&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1037">config</a></pre>
 </li>
 </ul>
 <a name="rackManager">
@@ -663,7 +663,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>rackManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1037">rackManager</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1038">rackManager</a></pre>
 </li>
 </ul>
 <a name="RANDOM">
@@ -672,7 +672,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>RANDOM</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1038">RANDOM</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Random.html?is-external=true" title="class or interface in java.util">Random</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1039">RANDOM</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -681,7 +681,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1039">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1040">LOG</a></pre>
 </li>
 </ul>
 <a name="metricsBalancer">
@@ -690,7 +690,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsBalancer</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/MetricsBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">MetricsBalancer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1040">metricsBalancer</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/MetricsBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">MetricsBalancer</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1041">metricsBalancer</a></pre>
 </li>
 </ul>
 <a name="clusterStatus">
@@ -699,7 +699,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatus</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1041">clusterStatus</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1042">clusterStatus</a></pre>
 </li>
 </ul>
 <a name="masterServerName">
@@ -708,7 +708,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>masterServerName</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1042">masterServerName</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1043">masterServerName</a></pre>
 </li>
 </ul>
 <a name="services">
@@ -717,7 +717,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>services</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1043">services</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1044">services</a></pre>
 </li>
 </ul>
 <a name="onlySystemTablesOnMaster">
@@ -726,7 +726,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>onlySystemTablesOnMaster</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1044">onlySystemTablesOnMaster</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1045">onlySystemTablesOnMaster</a></pre>
 </li>
 </ul>
 <a name="maintenanceMode">
@@ -735,7 +735,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockListLast">
 <li class="blockList">
 <h4>maintenanceMode</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1045">maintenanceMode</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1046">maintenanceMode</a></pre>
 </li>
 </ul>
 </li>
@@ -752,7 +752,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>BaseLoadBalancer</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.110">BaseLoadBalancer</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.111">BaseLoadBalancer</a>()</pre>
 <div class="block">The constructor that uses the basic MetricsBalancer</div>
 </li>
 </ul>
@@ -762,7 +762,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BaseLoadBalancer</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.119">BaseLoadBalancer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/MetricsBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">MetricsBalancer</a>&nbsp;metricsBalancer)</pre>
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.120">BaseLoadBalancer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/MetricsBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">MetricsBalancer</a>&nbsp;metricsBalancer)</pre>
 <div class="block">This Constructor accepts an instance of MetricsBalancer,
  which will be used instead of creating a new one</div>
 </li>
@@ -781,7 +781,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionFinder</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.124">createRegionFinder</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.125">createRegionFinder</a>()</pre>
 </li>
 </ul>
 <a name="setConf-org.apache.hadoop.conf.Configuration-">
@@ -790,7 +790,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>setConf</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1048">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1049">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>setConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -803,7 +803,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>setSlop</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1069">setSlop</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1070">setSlop</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="shouldBeOnMaster-org.apache.hadoop.hbase.client.RegionInfo-">
@@ -812,7 +812,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldBeOnMaster</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1078">shouldBeOnMaster</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1079">shouldBeOnMaster</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</pre>
 <div class="block">Check if a region belongs to some system table.
  If so, the primary replica may be expected to be put on the master regionserver.</div>
 </li>
@@ -823,7 +823,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceMasterRegions</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1086">balanceMasterRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api [...]
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1087">balanceMasterRegions</a>(<a href="https://docs.oracle.com/javase/8/docs/api [...]
 <div class="block">Balance the regions that should be on master regionserver.</div>
 </li>
 </ul>
@@ -833,8 +833,9 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>assignMasterSystemRegions</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo [...]
-                                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
+<pre>@NonNull
+protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html [...]
+                                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 <div class="block">If master is configured to carry system tables only, in here is
  where we figure what to assign it.</div>
 </li>
@@ -845,7 +846,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>getConf</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1155">getConf</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1154">getConf</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -858,7 +859,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterMetrics</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1160">setClusterMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;st)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1159">setClusterMetrics</a>(<a href="../../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;st)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setClusterMetrics-org.apache.hadoop.hbase.ClusterMetrics-">LoadBalancer</a></code></span></div>
 <div class="block">Set the current cluster status. This allows a LoadBalancer to map host name to a server</div>
 <dl>
@@ -873,7 +874,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>setMasterServices</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1169">setMasterServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1168">setMasterServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setMasterServices-org.apache.hadoop.hbase.master.MasterServices-">LoadBalancer</a></code></span></div>
 <div class="block">Set the master service.</div>
 <dl>
@@ -888,7 +889,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>postMasterStartupInitialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1181">postMasterStartupInitialize</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1180">postMasterStartupInitialize</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#postMasterStartupInitialize--">LoadBalancer</a></code></span></div>
 <div class="block">If balancer needs to do initialization after Master has started up, lets do that here.</div>
 <dl>
@@ -903,7 +904,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>setRackManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1193">setRackManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a>&nbsp;rackManager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1192">setRackManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/RackManager.html" title="class in org.apache.hadoop.hbase.master">RackManager</a>&nbsp;rackManager)</pre>
 </li>
 </ul>
 <a name="needsBalance-org.apache.hadoop.hbase.TableName-org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster-">
@@ -912,7 +913,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>needsBalance</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1197">needsBalance</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1196">needsBalance</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;c)</pre>
 </li>
 </ul>
@@ -922,7 +923,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>areSomeRegionReplicasColocated</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1238">areSomeRegionReplicasColocated</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;c)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1237">areSomeRegionReplicasColocated</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;c)</pre>
 <div class="block">Subclasses should implement this to return true if the cluster has nodes that hosts
  multiple replicas for the same region, or, if there are multiple racks and the same
  rack hosts replicas of the same region</div>
@@ -940,7 +941,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>idleRegionServerExist</h4>
-<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1242">idleRegionServerExist</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;c)</pre>
+<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1241">idleRegionServerExist</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;c)</pre>
 </li>
 </ul>
 <a name="roundRobinAssignment-java.util.List-java.util.List-">
@@ -949,9 +950,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.ht [...]
-                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                      throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<pre>@NonNull
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" t [...]
+                                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                               throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block">Generates a bulk assignment plan to be used on cluster startup using a
  simple round-robin assignment.
  <p>
@@ -969,8 +971,8 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <dd><code>regions</code> - all regions</dd>
 <dd><code>servers</code> - all servers</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>map of server to the regions it should take, or null if no
-         assignment is possible (ie. no regions or no servers)</dd>
+<dd>map of server to the regions it should take, or emptyMap if no
+         assignment is possible (ie. no servers)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></code></dd>
 </dl>
@@ -982,7 +984,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>createCluster</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1314">createCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../ [...]
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1317">createCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../ [...]
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                                           throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
@@ -997,7 +999,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>findIdleServers</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1353">findIdleServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html? [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1356">findIdleServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html? [...]
 </li>
 </ul>
 <a name="randomAssignment-org.apache.hadoop.hbase.client.RegionInfo-java.util.List-">
@@ -1006,7 +1008,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1362">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1365">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
                             throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block">Used to assign a single region to a random server.</div>
@@ -1026,9 +1028,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>retainAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.ht [...]
-                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                  throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<pre>@NonNull
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" t [...]
+                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                           throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block">Generates a bulk assignment startup plan, attempting to reuse the existing
  assignment information from META, but adjusting for the specified list of
  available/online servers available for assignment.
@@ -1047,7 +1050,8 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <dd><code>regions</code> - regions and existing assignment from meta</dd>
 <dd><code>servers</code> - available servers</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>map of servers and regions to be assigned to them</dd>
+<dd>map of servers and regions to be assigned to them, or emptyMap if no
+           assignment is possible (ie. no servers)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></code></dd>
 </dl>
@@ -1059,7 +1063,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1534">initialize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1539">initialize</a>()
                 throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#initialize--">LoadBalancer</a></code></span></div>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
@@ -1077,7 +1081,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1538">regionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1543">regionOnline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                          <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOnline-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as online at balancer.</div>
@@ -1093,7 +1097,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOffline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1542">regionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1547">regionOffline</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOffline-org.apache.hadoop.hbase.client.RegionInfo-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as offline at balancer.</div>
 <dl>
@@ -1108,7 +1112,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1546">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1551">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -1123,7 +1127,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1551">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1556">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -1141,7 +1145,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>updateBalancerStatus</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1559">updateBalancerStatus</a>(boolean&nbsp;status)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1564">updateBalancerStatus</a>(boolean&nbsp;status)</pre>
 <div class="block">Updates the balancer status tag reported to JMX</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1155,7 +1159,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1566">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1571">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                     <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 <div class="block">Used to assign a single region to a random server.</div>
@@ -1167,7 +1171,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignment</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1602">roundRobinAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1607">roundRobinAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/cli [...]
@@ -1180,7 +1184,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionAssignmentsByServer</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo [...]
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo [...]
 </li>
 </ul>
 <a name="toEnsumbleTableLoad-java.util.Map-">
@@ -1189,7 +1193,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>toEnsumbleTableLoad</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.h [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.h [...]
 </li>
 </ul>
 <a name="balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-">
@@ -1198,7 +1202,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceTable</h4>
-<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1684">balanceTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/T [...]
+<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1689">balanceTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/T [...]
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hado [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-">LoadBalancer</a></code></span></div>
 <div class="block">Perform the major balance operation for table, all class implement of <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master"><code>LoadBalancer</code></a>
@@ -1220,7 +1224,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceCluster</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1689">balanceCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/uti [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1694">balanceCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/uti [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#balanceCluster-java.util.Map-">LoadBalancer</a></code></span></div>
 <div class="block">Perform the major balance operation for cluster, will invoke <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-"><code>LoadBalancer.balanceTable(org.apache.hadoop.hbase.TableName, java.util.Map&lt;org.apache.hadoop.hbase.ServerName, java.util.List&lt;org.apache.hadoop.hbase.client.RegionInfo&gt;&gt;)</code></a> to do actual
  balance. Normally not need override this method, except
@@ -1243,7 +1247,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalance
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1707">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#line.1712">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">LoadBalancer</a></code></span></div>
 <div class="block">Notification that config has changed</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html
index 7d74a17..bf1a8b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.627">FavoredStochasticBalancer.FavoredNodeLoadPicker</a>
+<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.631">FavoredStochasticBalancer.FavoredNodeLoadPicker</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/CandidateGenerator.html" title="class in org.apache.hadoop.hbase.master.balancer">CandidateGenerator</a></pre>
 </li>
 </ul>
@@ -209,7 +209,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FavoredNodeLoadPicker</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.627">FavoredNodeLoadPicker</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.631">FavoredNodeLoadPicker</a>()</pre>
 </li>
 </ul>
 </li>
@@ -226,7 +226,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockList">
 <li class="blockList">
 <h4>generate</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.630">generate</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop. [...]
+<pre><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.634">generate</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop. [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/CandidateGenerator.html#generate-org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster-">generate</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/CandidateGenerator.html" title="class in org.apache.hadoop.hbase.master.balancer">CandidateGenerator</a></code></dd>
@@ -239,7 +239,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockList">
 <li class="blockList">
 <h4>pickLeastLoadedServer</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.649">pickLeastLoadedServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.653">pickLeastLoadedServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                   int&nbsp;thisServer)</pre>
 </li>
 </ul>
@@ -249,7 +249,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockList">
 <li class="blockList">
 <h4>pickLeastLoadedFNServer</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.660">pickLeastLoadedFNServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.664">pickLeastLoadedFNServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;favoredNodes,
                                     int&nbsp;currentServerIndex)</pre>
 </li>
@@ -260,7 +260,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>pickMostLoadedServer</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.682">pickMostLoadedServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLoadPicker.html#line.686">pickMostLoadedServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster)</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html
index 461d0a7..d0d841d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.556">FavoredStochasticBalancer.FavoredNodeLocalityPicker</a>
+<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.560">FavoredStochasticBalancer.FavoredNodeLocalityPicker</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/CandidateGenerator.html" title="class in org.apache.hadoop.hbase.master.balancer">CandidateGenerator</a></pre>
 </li>
 </ul>
@@ -207,7 +207,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FavoredNodeLocalityPicker</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.556">FavoredNodeLocalityPicker</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.560">FavoredNodeLocalityPicker</a>()</pre>
 </li>
 </ul>
 </li>
@@ -224,7 +224,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockList">
 <li class="blockList">
 <h4>generate</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.559">generate</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in [...]
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster.Action</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.563">generate</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/CandidateGenerator.html#generate-org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster-">generate</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/CandidateGenerator.html" title="class in org.apache.hadoop.hbase.master.balancer">CandidateGenerator</a></code></dd>
@@ -237,7 +237,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockList">
 <li class="blockList">
 <h4>getDifferentFavoredNode</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.596">getDifferentFavoredNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.600">getDifferentFavoredNode</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;favoredNodes,
                                     int&nbsp;currentServer)</pre>
 </li>
@@ -248,7 +248,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/Candi
 <ul class="blockListLast">
 <li class="blockList">
 <h4>pickLowestLocalRegionOnServer</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.618">pickLowestLocalRegionOnServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.FavoredNodeLocalityPicker.html#line.622">pickLowestLocalRegionOnServer</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a>&nbsp;cluster,
                                           int&nbsp;server)</pre>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html
index 0344d55..b17e043 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html
@@ -124,7 +124,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.72">FavoredStochasticBalancer</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.74">FavoredStochasticBalancer</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">StochasticLoadBalancer</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPromoter.html" title="interface in org.apache.hadoop.hbase.favored">FavoredNodesPromoter</a></pre>
 <div class="block">An implementation of the <a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master"><code>LoadBalancer</code></a> that
@@ -425,7 +425,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.75">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.77">LOG</a></pre>
 </li>
 </ul>
 <a name="fnm">
@@ -434,7 +434,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fnm</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.76">fnm</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.78">fnm</a></pre>
 </li>
 </ul>
 </li>
@@ -451,7 +451,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FavoredStochasticBalancer</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.72">FavoredStochasticBalancer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.74">FavoredStochasticBalancer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -468,7 +468,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.79">initialize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.81">initialize</a>()
                 throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#initialize--">LoadBalancer</a></code></span></div>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
@@ -488,7 +488,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>configureGenerators</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.84">configureGenerators</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.86">configureGenerators</a>()</pre>
 </li>
 </ul>
 <a name="setMasterServices-org.apache.hadoop.hbase.master.MasterServices-">
@@ -497,7 +497,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>setMasterServices</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.92">setMasterServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.94">setMasterServices</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setMasterServices-org.apache.hadoop.hbase.master.MasterServices-">LoadBalancer</a></code></span></div>
 <div class="block">Set the master service.</div>
 <dl>
@@ -514,9 +514,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.ht [...]
-                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                      throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<pre>@NonNull
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" t [...]
+                                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                               throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">BaseLoadBalancer</a></code></span></div>
 <div class="block">Generates a bulk assignment plan to be used on cluster startup using a
  simple round-robin assignment.
@@ -537,8 +538,8 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <dd><code>regions</code> - all regions</dd>
 <dd><code>servers</code> - all servers</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>map of server to the regions it should take, or null if no
-         assignment is possible (ie. no regions or no servers)</dd>
+<dd>map of server to the regions it should take, or emptyMap if no
+         assignment is possible (ie. no servers)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></code></dd>
 </dl>
@@ -550,7 +551,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>mergeAssignmentMaps</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.166">mergeAssignmentMaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.169">mergeAssignmentMaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util [...]
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/clie [...]
 </li>
 </ul>
@@ -560,7 +561,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>generateFNForRegionsWithoutFN</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.h [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.h [...]
                                                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&gt;&nbsp;regions)
                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -575,7 +576,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>segregateRegionsAndAssignRegionsWithFavoredNodes</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=tru [...]
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=tru [...]
                                                                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;onlineServers)
                                                                                                           throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
@@ -590,7 +591,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionToMap</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.240">addRegionToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.243">addRegionToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List [...]
                             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                             <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;host)</pre>
 </li>
@@ -601,7 +602,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerFromFavoredNode</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.255">getServerFromFavoredNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerN [...]
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.258">getServerFromFavoredNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerN [...]
                                             <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;fn)</pre>
 </li>
 </ul>
@@ -611,7 +612,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>assignRegionToAvailableFavoredNode</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.269">assignRegionToAvailableFavoredNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/doc [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.272">assignRegionToAvailableFavoredNode</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/doc [...]
                                                 <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                                 <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;primaryHost,
                                                 <a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;secondaryHost,
@@ -624,7 +625,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.309">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.312">randomAssignment</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
                             throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#randomAssignment-org.apache.hadoop.hbase.client.RegionInfo-java.util.List-">BaseLoadBalancer</a></code></span></div>
@@ -647,7 +648,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>updateFavoredNodesForRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.359">updateFavoredNodesForRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.362">updateFavoredNodesForRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                                          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;newFavoredNodes)
                                   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>
@@ -662,9 +663,10 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>retainAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.ht [...]
-                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                  throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<pre>@NonNull
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" t [...]
+                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                           throws <a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.html#retainAssignment-java.util.Map-java.util.List-">BaseLoadBalancer</a></code></span></div>
 <div class="block">Generates a bulk assignment startup plan, attempting to reuse the existing
  assignment information from META, but adjusting for the specified list of
@@ -686,7 +688,8 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <dd><code>regions</code> - regions and existing assignment from meta</dd>
 <dd><code>servers</code> - available servers</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>map of servers and regions to be assigned to them</dd>
+<dd>map of servers and regions to be assigned to them, or emptyMap if no
+           assignment is possible (ie. no servers)</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></code></dd>
 </dl>
@@ -698,7 +701,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineFavoredNodes</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.460">getOnlineFavoredNodes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/u [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.464">getOnlineFavoredNodes</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/u [...]
                                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;serversWithoutStartCodes)</pre>
 </li>
 </ul>
@@ -708,7 +711,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>getFavoredNodes</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.478">getFavoredNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Region [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.482">getFavoredNodes</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Region [...]
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPromoter.html#getFavoredNodes-org.apache.hadoop.hbase.client.RegionInfo-">getFavoredNodes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPromoter.html" title="interface in org.apache.hadoop.hbase.favored">FavoredNodesPromoter</a></code></dd>
@@ -721,7 +724,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>generateFavoredNodesForDaughter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.493">generateFavoredNodesForDaughter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.497">generateFavoredNodesForDaughter</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers,
                                             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;parent,
                                             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionA,
                                             <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionB)
@@ -740,7 +743,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>getInheritedFNForDaughter</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.523">getInheritedFNForDaughter</a>(<a href="../../../../../../org/apache/hadoop/hbase/favo [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.527">getInheritedFNForDaughter</a>(<a href="../../../../../../org/apache/hadoop/hbase/favo [...]
                                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;parentFavoredNodes,
                                                   <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPlan.Position.html" title="enum in org.apache.hadoop.hbase.favored">FavoredNodesPlan.Position</a>&nbsp;primary,
                                                   <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNodesPlan.Position.html" title="enum in org.apache.hadoop.hbase.favored">FavoredNodesPlan.Position</a>&nbsp;secondary)
@@ -757,7 +760,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockList">
 <li class="blockList">
 <h4>generateFavoredNodesForMergedRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.548">generateFavoredNodesForMergedRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;merged,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.552">generateFavoredNodesForMergedRegion</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;merged,
                                                 <a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>[]&nbsp;mergeParents)
                                          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>
@@ -774,7 +777,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/favored/FavoredNod
 <ul class="blockListLast">
 <li class="blockList">
 <h4>balanceTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.699">balanceTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/Ta [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.html#line.703">balanceTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/Ta [...]
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/ [...]
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html#balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-">StochasticLoadBalancer</a></code></span></div>
 <div class="block">Given the cluster state this will try and approach an optimal balance. This
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index bc3eea6..09b202e 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -350,12 +350,12 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/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/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/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/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/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/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</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.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/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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 616d87c..54e16d1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -222,10 +222,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/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/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>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index 6a86234..90a1f01 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -126,8 +126,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index e171a9f..38d63be 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -426,19 +426,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</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/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index cede0db..4aef9f8 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -217,10 +217,10 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.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/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/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/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/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
index 2525a0e..7b64815 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
@@ -133,8 +133,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureStoreTracker.DeleteState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 266a4de..3350f51 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/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/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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</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 03b82d0..fa012eb 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -733,20 +733,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/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/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/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/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>
-<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/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/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/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/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 </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 a1142ed..5b2745a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,8 +130,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/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/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
index aab2f78..8952aa3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
@@ -913,7 +913,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.wal.<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#getTimestamp-java.lang.String-">getTimestamp</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync--">sync</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-boolean-">sync</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-">sync</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-boolean-">sync</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync--">sync</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-boolean-">sync</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-">sync</a>, <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-boolean-">sync</a></code></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html
index 51e9e3c..9659515 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html
@@ -566,13 +566,6 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.wal.WAL">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.wal.<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#getTimestamp-java.lang.String-">getTimestamp</a></code></li>
-</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html
index 90e277f..04a4c28 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html
@@ -277,13 +277,6 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Asyn
 <h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.wal.WAL">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.wal.<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#getTimestamp-java.lang.String-">getTimestamp</a></code></li>
-</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html
index b42c26a..831e1c9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html
@@ -519,13 +519,6 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <h3>Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
 <code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="htt [...]
 </ul>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.wal.WAL">
-<!--   -->
-</a>
-<h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.wal.<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#getTimestamp-java.lang.String-">getTimestamp</a></code></li>
-</ul>
 </li>
 </ul>
 </li>
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 0874f26..898baef 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,9 +248,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/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/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/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/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</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 f3a4541..57a9d42 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -175,8 +175,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
index 44d55bb..f69108a 100644
--- a/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
+++ b/devapidocs/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.70">RSGroupBasedLoadBalancer</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.71">RSGroupBasedLoadBalancer</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/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a></pre>
 <div class="block">GroupBasedLoadBalancer, used when Region Server Grouping is configured (HBase-6721) It does
@@ -401,7 +401,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.71">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.72">LOG</a></pre>
 </li>
 </ul>
 <a name="config">
@@ -410,7 +410,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>config</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.73">config</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.74">config</a></pre>
 </li>
 </ul>
 <a name="clusterStatus">
@@ -419,7 +419,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatus</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.74">clusterStatus</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.75">clusterStatus</a></pre>
 </li>
 </ul>
 <a name="masterServices">
@@ -428,7 +428,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>masterServices</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.75">masterServices</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.76">masterServices</a></pre>
 </li>
 </ul>
 <a name="favoredNodesManager">
@@ -437,7 +437,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>favoredNodesManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.76">favoredNodesManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.77">favoredNodesManager</a></pre>
 </li>
 </ul>
 <a name="rsGroupInfoManager">
@@ -446,7 +446,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>rsGroupInfoManager</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.77">rsGroupInfoManager</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.78">rsGroupInfoManager</a></pre>
 </li>
 </ul>
 <a name="internalBalancer">
@@ -455,7 +455,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>internalBalancer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.78">internalBalancer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.79">internalBalancer</a></pre>
 </li>
 </ul>
 <a name="FALLBACK_GROUP_ENABLE_KEY">
@@ -464,7 +464,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockList">
 <li class="blockList">
 <h4>FALLBACK_GROUP_ENABLE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.87">FALLBACK_GROUP_ENABLE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.88">FALLBACK_GROUP_ENABLE_KEY</a></pre>
 <div class="block">Set this key to <code>true</code> to allow region fallback.
  Fallback to the default rsgroup first, then fallback to any group if no online servers in
  default rsgroup.
@@ -482,7 +482,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fallbackEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.89">fallbackEnabled</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.90">fallbackEnabled</a></pre>
 </li>
 </ul>
 </li>
@@ -500,7 +500,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.h
 <li class="blockList">
 <h4>RSGroupBasedLoadBalancer</h4>
 <pre>@InterfaceAudience.Private
-public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.95">RSGroupBasedLoadBalancer</a>()</pre>
+public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.96">RSGroupBasedLoadBalancer</a>()</pre>
 <div class="block">Used by reflection in <a href="../../../../../org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.html" title="class in org.apache.hadoop.hbase.master.balancer"><code>LoadBalancerFactory</code></a>.</div>
 </li>
 </ul>
@@ -518,7 +518,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>getConf</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.98">getConf</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.99">getConf</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -531,7 +531,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>setConf</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.103">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.104">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>setConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -544,7 +544,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>setClusterMetrics</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.111">setClusterMetrics</a>(<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;sm)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.112">setClusterMetrics</a>(<a href="../../../../../org/apache/hadoop/hbase/ClusterMetrics.html" title="interface in org.apache.hadoop.hbase">ClusterMetrics</a>&nbsp;sm)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setClusterMetrics-org.apache.hadoop.hbase.ClusterMetrics-">LoadBalancer</a></code></span></div>
 <div class="block">Set the current cluster status. This allows a LoadBalancer to map host name to a server</div>
 <dl>
@@ -559,7 +559,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>setMasterServices</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.119">setMasterServices</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.120">setMasterServices</a>(<a href="../../../../../org/apache/hadoop/hbase/master/MasterServices.html" title="interface in org.apache.hadoop.hbase.master">MasterServices</a>&nbsp;masterServices)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#setMasterServices-org.apache.hadoop.hbase.master.MasterServices-">LoadBalancer</a></code></span></div>
 <div class="block">Set the master service.</div>
 <dl>
@@ -574,7 +574,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceCluster</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.128">balanceCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.h [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.129">balanceCluster</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.h [...]
                                 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">Override to balance by RSGroup
  not invoke <a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#balanceTable-org.apache.hadoop.hbase.TableName-java.util.Map-"><code>balanceTable(TableName, Map)</code></a></div>
@@ -597,9 +597,10 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>roundRobinAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" ti [...]
-                                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                      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>
+<pre>@NonNull
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title=" [...]
+                                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#roundRobinAssignment-java.util.List-java.util.List-">LoadBalancer</a></code></span></div>
 <div class="block">Perform a Round Robin assignment of regions.</div>
 <dl>
@@ -618,9 +619,10 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>retainAssignment</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" ti [...]
-                                                         <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
-                                                  throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
+<pre>@NonNull
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title=" [...]
+                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
+                                                           throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#retainAssignment-java.util.Map-java.util.List-">LoadBalancer</a></code></span></div>
 <div class="block">Assign regions to the previously hosting region server</div>
 <dl>
@@ -639,7 +641,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>randomAssignment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.216">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.217">randomAssignment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#randomAssignment-org.apache.hadoop.hbase.client.RegionInfo-java.util.List-">LoadBalancer</a></code></span></div>
@@ -660,7 +662,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>generateGroupAssignments</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html [...]
                                                                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)
                                                                         throws <a href="../../../../../org/apache/hadoop/hbase/HBaseIOException.html" title="class in org.apache.hadoop.hbase">HBaseIOException</a></pre>
 <dl>
@@ -675,7 +677,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>filterOfflineServers</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.265">filterOfflineServers</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.266">filterOfflineServers</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfo.html" [...]
                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;onlineServers)</pre>
 </li>
 </ul>
@@ -685,7 +687,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>filterServers</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.287">filterServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-externa [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.288">filterServers</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-externa [...]
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;onlineServers)</pre>
 <div class="block">Filter servers based on the online servers.
  <p/>
@@ -709,7 +711,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>correctAssignments</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title= [...]
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title= [...]
                                                                                            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>
@@ -723,7 +725,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.337">initialize</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.338">initialize</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#initialize--">LoadBalancer</a></code></span></div>
 <div class="block">Initialize the load balancer. Must be called after setters.</div>
@@ -741,7 +743,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>isOnline</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.379">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.380">isOnline</a>()</pre>
 </li>
 </ul>
 <a name="regionOnline-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">
@@ -750,7 +752,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOnline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.389">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.390">regionOnline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo,
                          <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOnline-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.ServerName-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as online at balancer.</div>
@@ -766,7 +768,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>regionOffline</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.393">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.394">regionOffline</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;regionInfo)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#regionOffline-org.apache.hadoop.hbase.client.RegionInfo-">LoadBalancer</a></code></span></div>
 <div class="block">Marks the region as offline at balancer.</div>
 <dl>
@@ -781,7 +783,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.397">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.398">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#onConfigurationChange-org.apache.hadoop.conf.Configuration-">LoadBalancer</a></code></span></div>
 <div class="block">Notification that config has changed</div>
 <dl>
@@ -798,7 +800,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.402">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.403">stop</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -816,7 +818,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.406">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.407">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>
@@ -831,7 +833,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>setRsGroupInfoManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.411">setRsGroupInfoManager</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;rsGroupInfoManager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.412">setRsGroupInfoManager</a>(<a href="../../../../../org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.html" title="interface in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManager</a>&nbsp;rsGroupInfoManager)</pre>
 </li>
 </ul>
 <a name="getInternalBalancer--">
@@ -840,7 +842,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>getInternalBalancer</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.415">getInternalBalancer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.416">getInternalBalancer</a>()</pre>
 </li>
 </ul>
 <a name="getFavoredNodesManager--">
@@ -849,7 +851,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>getFavoredNodesManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.419">getFavoredNodesManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/favored/FavoredNodesManager.html" title="class in org.apache.hadoop.hbase.favored">FavoredNodesManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.420">getFavoredNodesManager</a>()</pre>
 </li>
 </ul>
 <a name="postMasterStartupInitialize--">
@@ -858,7 +860,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>postMasterStartupInitialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.424">postMasterStartupInitialize</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.425">postMasterStartupInitialize</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#postMasterStartupInitialize--">LoadBalancer</a></code></span></div>
 <div class="block">If balancer needs to do initialization after Master has started up, lets do that here.</div>
 <dl>
@@ -873,7 +875,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>updateBalancerStatus</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.428">updateBalancerStatus</a>(boolean&nbsp;status)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.429">updateBalancerStatus</a>(boolean&nbsp;status)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html#updateBalancerStatus-boolean-">updateBalancerStatus</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/master/LoadBalancer.html" title="interface in org.apache.hadoop.hbase.master">LoadBalancer</a></code></dd>
@@ -886,7 +888,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockList">
 <li class="blockList">
 <h4>balanceTable</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.436">balanceTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" titl [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/master/RegionPlan.html" title="class in org.apache.hadoop.hbase.master">RegionPlan</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.437">balanceTable</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" titl [...]
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client [...]
 <div class="block">can achieve table balanced rather than overall balanced</div>
 <dl>
@@ -906,7 +908,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSG
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getFallBackCandidates</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.466">getFallBackCandidates</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?i [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.html#line.467">getFallBackCandidates</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?i [...]
 </li>
 </ul>
 </li>
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 b39b1ae..01e89b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,12 +162,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</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 c793825..062071e 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -189,9 +189,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
+<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/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 1c4097f..60fa9ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,8 +211,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.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/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/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 07b6865..9d436af 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -541,13 +541,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>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html b/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html
index b056741..5d3a6c4 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.432">AbstractFSWALProvider.WALStartTimeComparator</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.454">AbstractFSWALProvider.WALStartTimeComparator</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="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.Path&gt;</pre>
 <div class="block">Comparator used to compare WAL files together based on their start time.
@@ -206,7 +206,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WALStartTimeComparator</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html#line.432">WALStartTimeComparator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html#line.454">WALStartTimeComparator</a>()</pre>
 </li>
 </ul>
 </li>
@@ -223,7 +223,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockList">
 <li class="blockList">
 <h4>compare</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html#line.434">compare</a>(org.apache.hadoop.fs.Path&nbsp;o1,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html#line.456">compare</a>(org.apache.hadoop.fs.Path&nbsp;o1,
                    org.apache.hadoop.fs.Path&nbsp;o2)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -237,7 +237,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTS</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html#line.446">getTS</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.WALStartTimeComparator.html#line.468">getTS</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block">Split a path to get the start time
  For example: 10.20.20.171%3A60020.1277499063250
  Could also be a meta WAL which adds a '.meta' suffix or a synchronous replication WAL
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html b/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html
index 66fab06..0348c2a 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":6,"i3":6,"i4":9,"i5":9,"i6":9,"i7":10,"i8":9,"i9":10,"i10":9,"i11":9,"i12":9,"i13":10,"i14":9,"i15":9,"i16":9,"i17":9,"i18":10,"i19":10,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":10,"i27":9};
+var methods = {"i0":10,"i1":10,"i2":6,"i3":6,"i4":9,"i5":9,"i6":9,"i7":10,"i8":9,"i9":10,"i10":9,"i11":9,"i12":9,"i13":9,"i14":10,"i15":9,"i16":9,"i17":9,"i18":9,"i19":10,"i20":10,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":10,"i28":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -223,37 +223,43 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#NO_TIMESTAMP">NO_TIMESTAMP</a></span></code>
+<div class="block">Define for when no timestamp found.</div>
+</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/wal/AbstractFSWALProvider.html#providerId">providerId</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<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/wal/AbstractFSWALProvider.html#SEPARATE_OLDLOGDIR">SEPARATE_OLDLOGDIR</a></span></code>
 <div class="block">Separate old log into different dir by regionserver name</div>
 </td>
 </tr>
-<tr class="altColor">
+<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/wal/AbstractFSWALProvider.html#SPLITTING_EXT">SPLITTING_EXT</a></span></code>
 <div class="block">File Extension used while splitting an WAL into regions (HBASE-2312)</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html" title="type parameter in AbstractFSWALProvider">T</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#wal">wal</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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/wal/AbstractFSWALProvider.html#WAL_FILE_NAME_DELIMITER">WAL_FILE_NAME_DELIMITER</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#WAL_FILE_NAME_PATTERN">WAL_FILE_NAME_PATTERN</a></span></code>
 <div class="block">Pattern used to validate a WAL file name see <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#validateWALFilename-java.lang.String-"><code>validateWALFilename(String)</code></a> for
  description.</div>
 </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/concurrent/locks/ReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReadWriteLock</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#walCreateLock">walCreateLock</a></span></code>
 <div class="block">We use walCreateLock to prevent wal recreation in different threads, and also prevent getWALs
@@ -315,7 +321,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#extractFileNumFromWAL-org.apache.hadoop.hbase.wal.WAL-">extractFileNumFromWAL</a></span>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)</code>
-<div class="block">It returns the file create timestamp from the file name.</div>
+<div class="block">It returns the file create timestamp (the 'FileNum') from the file name.</div>
 </td>
 </tr>
 <tr id="i5" class="rowColor">
@@ -376,39 +382,45 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 </td>
 </tr>
 <tr id="i13" class="rowColor">
+<td class="colFirst"><code>static long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#getTimestamp-java.lang.String-">getTimestamp</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
+<div class="block">Split a WAL filename to get a start time.</div>
+</td>
+</tr>
+<tr id="i14" class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html" title="type parameter in AbstractFSWALProvider">T</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#getWAL-org.apache.hadoop.hbase.client.RegionInfo-">getWAL</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" 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/wal/AbstractFSWALProvider.html#getWALArchiveDirectoryName-org.apache.hadoop.conf.Configuration-java.lang.String-">getWALArchiveDirectoryName</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                           <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serverName)</code>
 <div class="block">Construct the directory name for all old WALs on a given server.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" 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/wal/AbstractFSWALProvider.html#getWALDirectoryName-java.lang.String-">getWALDirectoryName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serverName)</code>
 <div class="block">Construct the directory name for all WALs on a given server.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>private 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/wal/AbstractFSWALProvider.html#getWALNameGroupFromWALName-java.lang.String-int-">getWALNameGroupFromWALName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                           int&nbsp;group)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" 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/wal/AbstractFSWALProvider.html#getWALPrefixFromWALName-java.lang.String-">getWALPrefixFromWALName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
 <div class="block">Get prefix of the log from its name, assuming WAL name in format of
  log_prefix.filenumber.log_suffix</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#getWALs--">getWALs</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#init-org.apache.hadoop.hbase.wal.WALFactory-org.apache.hadoop.conf.Configuration-java.lang.String-org.apache.hadoop.hbase.Abortable-">init</a></span>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a>&nbsp;factory,
     org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -417,43 +429,43 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <div class="block">Set up the provider to create wals.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i21" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#isArchivedLogFile-org.apache.hadoop.fs.Path-">isArchivedLogFile</a></span>(org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i22" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#isMetaFile-org.apache.hadoop.fs.Path-">isMetaFile</a></span>(org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr id="i22" class="altColor">
+<tr id="i23" class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#isMetaFile-java.lang.String-">isMetaFile</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr id="i23" class="rowColor">
+<tr id="i24" class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#openReader-org.apache.hadoop.fs.Path-org.apache.hadoop.conf.Configuration-">openReader</a></span>(org.apache.hadoop.fs.Path&nbsp;path,
           org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Opens WAL reader with retries and additional exception handling</div>
 </td>
 </tr>
-<tr id="i24" class="altColor">
+<tr id="i25" class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#recoverLease-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.Path-">recoverLease</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
             org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
-<tr id="i25" class="rowColor">
+<tr id="i26" class="altColor">
 <td class="colFirst"><code>(package private) static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#requestLogRoll-org.apache.hadoop.hbase.wal.WAL-">requestLogRoll</a></span>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)</code>
 <div class="block">request a log roll, but don't actually do it.</div>
 </td>
 </tr>
-<tr id="i26" class="altColor">
+<tr id="i27" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#shutdown--">shutdown</a></span>()</code>
 <div class="block">persist outstanding WALs to storage and stop accepting new appends.</div>
 </td>
 </tr>
-<tr id="i27" class="rowColor">
+<tr id="i28" class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#validateWALFilename-java.lang.String-">validateWALFilename</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filename)</code>
 <div class="block">A WAL file name is of the format: &lt;wal-name&gt;<a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#WAL_FILE_NAME_DELIMITER"><code>WAL_FILE_NAME_DELIMITER</code></a>
@@ -665,14 +677,28 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <a name="WAL_FILE_NAME_PATTERN">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>WAL_FILE_NAME_PATTERN</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.284">WAL_FILE_NAME_PATTERN</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.264">WAL_FILE_NAME_PATTERN</a></pre>
 <div class="block">Pattern used to validate a WAL file name see <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#validateWALFilename-java.lang.String-"><code>validateWALFilename(String)</code></a> for
  description.</div>
 </li>
 </ul>
+<a name="NO_TIMESTAMP">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>NO_TIMESTAMP</h4>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.270">NO_TIMESTAMP</a></pre>
+<div class="block">Define for when no timestamp found.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.wal.AbstractFSWALProvider.NO_TIMESTAMP">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -903,8 +929,8 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>extractFileNumFromWAL</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.267">extractFileNumFromWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)</pre>
-<div class="block">It returns the file create timestamp from the file name. For name format see
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.279">extractFileNumFromWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)</pre>
+<div class="block">It returns the file create timestamp (the 'FileNum') from the file name. For name format see
  <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#validateWALFilename-java.lang.String-"><code>validateWALFilename(String)</code></a> public until remaining tests move to o.a.h.h.wal</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -920,7 +946,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>validateWALFilename</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.294">validateWALFilename</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filename)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.299">validateWALFilename</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filename)</pre>
 <div class="block">A WAL file name is of the format: &lt;wal-name&gt;<a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#WAL_FILE_NAME_DELIMITER"><code>WAL_FILE_NAME_DELIMITER</code></a>
  &lt;file-creation-timestamp&gt;[.&lt;suffix&gt;]. provider-name is usually made up of a
  server-name and a provider-id</div>
@@ -932,13 +958,36 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 </dl>
 </li>
 </ul>
+<a name="getTimestamp-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getTimestamp</h4>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.315">getTimestamp</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<div class="block">Split a WAL filename to get a start time. WALs usually have the time we start writing to them
+ with as part of their name, usually the suffix. Sometimes there will be an extra suffix as when
+ it is a WAL for the meta table. For example, WALs might look like this
+ <code>10.20.20.171%3A60020.1277499063250</code> where <code>1277499063250</code> is the
+ timestamp. Could also be a meta WAL which adds a '.meta' suffix or a
+ synchronous replication WAL which adds a '.syncrep' suffix. Check for these. File also may have
+ no timestamp on it. For example the recovered.edits files are WALs but are named in ascending
+ order. Here is an example: 0000000000000016310. Allow for this.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>name</code> - Name of the WAL file.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Timestamp or <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#NO_TIMESTAMP"><code>NO_TIMESTAMP</code></a>.</dd>
+</dl>
+</li>
+</ul>
 <a name="getWALDirectoryName-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALDirectoryName</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.305">getWALDirectoryName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serverName)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.327">getWALDirectoryName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serverName)</pre>
 <div class="block">Construct the directory name for all WALs on a given server. Dir names currently look like this
  for WALs: <code>hbase//WALs/kalashnikov.att.net,61634,1486865297088</code>.</div>
 <dl>
@@ -956,7 +1005,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALArchiveDirectoryName</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.319">getWALArchiveDirectoryName</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.341">getWALArchiveDirectoryName</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;serverName)</pre>
 <div class="block">Construct the directory name for all old WALs on a given server. The default old WALs dir looks
  like: <code>hbase/oldWALs</code>. If you config hbase.separate.oldlogdir.by.regionserver to
@@ -975,7 +1024,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerNameFromWALDirectoryName</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.337">getServerNameFromWALDirectoryName</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.359">getServerNameFromWALDirectoryName</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;path)
                                                     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">Pulls a ServerName out of a Path generated according to our layout rules. In the below layouts,
@@ -998,7 +1047,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerNameFromWALDirectoryName</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.394">getServerNameFromWALDirectoryName</a>(org.apache.hadoop.fs.Path&nbsp;logFile)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.416">getServerNameFromWALDirectoryName</a>(org.apache.hadoop.fs.Path&nbsp;logFile)</pre>
 <div class="block">This function returns region server name from a log file name which is in one of the following
  formats:
  <ul>
@@ -1017,7 +1066,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.417">isMetaFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.439">isMetaFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 </li>
 </ul>
 <a name="isMetaFile-java.lang.String-">
@@ -1026,7 +1075,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.424">isMetaFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.446">isMetaFile</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if String ends in <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#META_WAL_PROVIDER_ID"><code>META_WAL_PROVIDER_ID</code></a></dd>
@@ -1039,7 +1088,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>isArchivedLogFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.453">isArchivedLogFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.475">isArchivedLogFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 </li>
 </ul>
 <a name="getArchivedLogPath-org.apache.hadoop.fs.Path-org.apache.hadoop.conf.Configuration-">
@@ -1048,7 +1097,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getArchivedLogPath</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.465">getArchivedLogPath</a>(org.apache.hadoop.fs.Path&nbsp;path,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.487">getArchivedLogPath</a>(org.apache.hadoop.fs.Path&nbsp;path,
                                                            org.apache.hadoop.conf.Configuration&nbsp;conf)
                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get the archived WAL file path</div>
@@ -1069,7 +1118,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>openReader</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.494">openReader</a>(org.apache.hadoop.fs.Path&nbsp;path,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Reader.html" title="interface in org.apache.hadoop.hbase.wal">WAL.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.516">openReader</a>(org.apache.hadoop.fs.Path&nbsp;path,
                                     org.apache.hadoop.conf.Configuration&nbsp;conf)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Opens WAL reader with retries and additional exception handling</div>
@@ -1090,7 +1139,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>recoverLease</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.541">recoverLease</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.563">recoverLease</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  org.apache.hadoop.fs.Path&nbsp;path)</pre>
 </li>
 </ul>
@@ -1100,7 +1149,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>addWALActionsListener</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.557">addWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.579">addWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html#addWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">WALProvider</a></code></span></div>
 <div class="block">Add a <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal"><code>WALActionsListener</code></a>.
  <p>
@@ -1119,7 +1168,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALNameGroupFromWALName</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.561">getWALNameGroupFromWALName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.583">getWALNameGroupFromWALName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
                                                  int&nbsp;group)</pre>
 </li>
 </ul>
@@ -1129,7 +1178,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getWALPrefixFromWALName</h4>
-<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.577">getWALPrefixFromWALName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>public static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#line.599">getWALPrefixFromWALName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block">Get prefix of the log from its name, assuming WAL name in format of
  log_prefix.filenumber.log_suffix</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.html b/devapidocs/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.html
index 9b64ea2..72e7390 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/AsyncFSWALProvider.html
@@ -268,7 +268,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvide
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html" title="class in org.apache.hadoop.hbase.wal">AbstractFSWALProvider</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#addWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">addWALActionsListener</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#close--">close</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#extractFileNumFromWAL-org.apache.hadoop.hbase.wal.WAL-">extractFileNumFromWAL</a>, <a href="../../../../../org/apache/ [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#addWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">addWALActionsListener</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#close--">close</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#extractFileNumFromWAL-org.apache.hadoop.hbase.wal.WAL-">extractFileNumFromWAL</a>, <a href="../../../../../org/apache/ [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/DisabledWALProvider.DisabledWAL.html b/devapidocs/org/apache/hadoop/hbase/wal/DisabledWALProvider.DisabledWAL.html
index e8a92c3..1234e84 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/DisabledWALProvider.DisabledWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/DisabledWALProvider.DisabledWAL.html
@@ -349,7 +349,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#getTimestamp-java.lang.String-">getTimestamp</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-boolean-">sync</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-boolean-">sync</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-boolean-">sync</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-boolean-">sync</a></code></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/FSHLogProvider.html b/devapidocs/org/apache/hadoop/hbase/wal/FSHLogProvider.html
index 0768be0..f536842 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/FSHLogProvider.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/FSHLogProvider.html
@@ -250,7 +250,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvide
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html" title="class in org.apache.hadoop.hbase.wal">AbstractFSWALProvider</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#addWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">addWALActionsListener</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#close--">close</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#extractFileNumFromWAL-org.apache.hadoop.hbase.wal.WAL-">extractFileNumFromWAL</a>, <a href="../../../../../org/apache/ [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#addWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">addWALActionsListener</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#close--">close</a>, <a href="../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#extractFileNumFromWAL-org.apache.hadoop.hbase.wal.WAL-">extractFileNumFromWAL</a>, <a href="../../../../../org/apache/ [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html
index d544a92..45a3d89 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Entry.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.261">WAL.Entry</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.260">WAL.Entry</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">Utility class that lets us keep track of the edit with it's key.</div>
 </li>
@@ -228,7 +228,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>edit</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.262">edit</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.261">edit</a></pre>
 </li>
 </ul>
 <a name="key">
@@ -237,7 +237,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>key</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.263">key</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.262">key</a></pre>
 </li>
 </ul>
 </li>
@@ -254,7 +254,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>Entry</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.265">Entry</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.264">Entry</a>()</pre>
 </li>
 </ul>
 <a name="Entry-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">
@@ -263,7 +263,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Entry</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.275">Entry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.274">Entry</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
              <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
 <div class="block">Constructor for both params</div>
 <dl>
@@ -287,7 +287,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getEdit</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.285">getEdit</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.284">getEdit</a>()</pre>
 <div class="block">Gets the edit</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -301,7 +301,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getKey</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.294">getKey</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.293">getKey</a>()</pre>
 <div class="block">Gets the key</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -315,7 +315,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.299">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Entry.html#line.298">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html
index 27d2101..0c45d05 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WAL.Reader.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.250">WAL.Reader</a>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.249">WAL.Reader</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
 <div class="block">When outside clients need to consume persisted WALs, they rely on a provided
  Reader.</div>
@@ -187,7 +187,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.251">next</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.250">next</a>()
         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -201,7 +201,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.252">next</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;reuse)
+<pre><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.251">next</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;reuse)
         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>
@@ -215,7 +215,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>seek</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.253">seek</a>(long&nbsp;pos)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.252">seek</a>(long&nbsp;pos)
    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>
@@ -229,7 +229,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getPosition</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.254">getPosition</a>()
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.253">getPosition</a>()
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -243,7 +243,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>reset</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.255">reset</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.Reader.html#line.254">reset</a>()
     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/WAL.html b/devapidocs/org/apache/hadoop/hbase/wal/WAL.html
index 5b66769..dd0aa1d 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/WAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/WAL.html
@@ -18,8 +18,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":38,"i7":6,"i8":17,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":6,"i16":18,"i17":6,"i18":18,"i19":6,"i20":6,"i21":6};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":38,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6,"i12":6,"i13":6,"i14":6,"i15":18,"i16":6,"i17":18,"i18":6,"i19":6,"i20":6};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],16:["t5","Default Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -111,7 +111,7 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>@InterfaceAudience.Private
  @InterfaceStability.Evolving
-public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.46">WAL</a>
+public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.45">WAL</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/WALFileLengthProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a></pre>
 <div class="block">A Write Ahead Log (WAL) provides service for reading, writing waledits. This interface provides
  APIs for WAL users (such as RegionServer) to use the WAL (do append, sync, etc).
@@ -159,7 +159,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd [...]
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t3" class="tableTab"><span><a href="javascript:show(4);">Abstract Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t5" class="tableTab"><span><a href="javascript:show(16);">Default Methods</a></span><span class="tabE [...]
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
@@ -220,41 +220,35 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 </td>
 </tr>
 <tr id="i8" class="altColor">
-<td class="colFirst"><code>static long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#getTimestamp-java.lang.String-">getTimestamp</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
-<div class="block">Split a WAL filename to get a start time.</div>
-</td>
-</tr>
-<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#registerWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">registerWALActionsListener</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</code>
 <div class="block">Registers WALActionsListener</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#rollWriter--">rollWriter</a></span>()</code>
 <div class="block">Roll the log writer.</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#rollWriter-boolean-">rollWriter</a></span>(boolean&nbsp;force)</code>
 <div class="block">Roll the log writer.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#shutdown--">shutdown</a></span>()</code>
 <div class="block">Stop accepting new writes.</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#startCacheFlush-byte:A-java.util.Map-">startCacheFlush</a></span>(byte[]&nbsp;encodedRegionName,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;familyToSeq)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#startCacheFlush-byte:A-java.util.Set-">startCacheFlush</a></span>(byte[]&nbsp;encodedRegionName,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;families)</code>
@@ -262,40 +256,40 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
  in order to be able to do accounting to figure which WALs can be let go.</div>
 </td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync--">sync</a></span>()</code>
 <div class="block">Sync what we have in the WAL.</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>default void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-boolean-">sync</a></span>(boolean&nbsp;forceSync)</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-">sync</a></span>(long&nbsp;txid)</code>
 <div class="block">Sync the WAL if the txId was not already sync'd.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>default void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#sync-long-boolean-">sync</a></span>(long&nbsp;txid,
     boolean&nbsp;forceSync)</code>&nbsp;</td>
 </tr>
-<tr id="i19" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#toString--">toString</a></span>()</code>
 <div class="block">Human readable identifying information about the state of this WAL.</div>
 </td>
 </tr>
-<tr id="i20" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#unregisterWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">unregisterWALActionsListener</a></span>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</code>
 <div class="block">Unregisters WALActionsListener</div>
 </td>
 </tr>
-<tr id="i21" class="rowColor">
+<tr id="i20" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#updateStore-byte:A-byte:A-java.lang.Long-boolean-">updateStore</a></span>(byte[]&nbsp;encodedRegionName,
            byte[]&nbsp;familyName,
@@ -332,7 +326,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>registerWALActionsListener</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.51">registerWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.50">registerWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
 <div class="block">Registers WALActionsListener</div>
 </li>
 </ul>
@@ -342,7 +336,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterWALActionsListener</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.56">unregisterWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.55">unregisterWALActionsListener</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
 <div class="block">Unregisters WALActionsListener</div>
 </li>
 </ul>
@@ -352,7 +346,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.69">rollWriter</a>()
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.68">rollWriter</a>()
                              throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FailedLogCloseException</a>,
                                     <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">Roll the log writer. That is, start writing log messages to a new file.
@@ -377,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.85">rollWriter</a>(boolean&nbsp;force)
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;byte[]&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.84">rollWriter</a>(boolean&nbsp;force)
                              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">Roll the log writer. That is, start writing log messages to a new file.
 
@@ -403,7 +397,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.91">shutdown</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.90">shutdown</a>()
        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Stop accepting new writes. If we have unsynced writes still in buffer, sync them.
  Extant edits are left in place in backing storage to be replayed later.</div>
@@ -419,7 +413,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.99">close</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.98">close</a>()
     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Caller no longer needs any edits from this WAL. Implementers are free to reclaim
  underlying resources after this call; i.e. filesystem based WALs can archive or
@@ -440,7 +434,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>appendData</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.116">appendData</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.115">appendData</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                 <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                 <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edits)
          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>
@@ -472,7 +466,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>appendMarker</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.136">appendMarker</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.135">appendMarker</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                   <a href="../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                   <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edits)
            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>
@@ -507,7 +501,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>updateStore</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.143">updateStore</a>(byte[]&nbsp;encodedRegionName,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.142">updateStore</a>(byte[]&nbsp;encodedRegionName,
                  byte[]&nbsp;familyName,
                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;sequenceid,
                  boolean&nbsp;onlyIfGreater)</pre>
@@ -522,7 +516,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.149">sync</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.148">sync</a>()
    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Sync what we have in the WAL.</div>
 <dl>
@@ -537,7 +531,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.155">sync</a>(long&nbsp;txid)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.154">sync</a>(long&nbsp;txid)
    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">Sync the WAL if the txId was not already sync'd.</div>
 <dl>
@@ -554,7 +548,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.161">sync</a>(boolean&nbsp;forceSync)
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.160">sync</a>(boolean&nbsp;forceSync)
            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="paramLabel">Parameters:</span></dt>
@@ -571,7 +565,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.170">sync</a>(long&nbsp;txid,
+<pre>default&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.169">sync</a>(long&nbsp;txid,
                   boolean&nbsp;forceSync)
            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>
@@ -590,7 +584,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>startCacheFlush</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.191">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.190">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;families)</pre>
 <div class="block">WAL keeps track of the sequence numbers that are as yet not flushed im memstores
  in order to be able to do accounting to figure which WALs can be let go. This method tells WAL
@@ -620,7 +614,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>startCacheFlush</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.193">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.192">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;familyToSeq)</pre>
 </li>
 </ul>
@@ -630,7 +624,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>completeCacheFlush</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.203">completeCacheFlush</a>(byte[]&nbsp;encodedRegionName,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.202">completeCacheFlush</a>(byte[]&nbsp;encodedRegionName,
                         long&nbsp;maxFlushedSeqId)</pre>
 <div class="block">Complete the cache flush.</div>
 <dl>
@@ -650,7 +644,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>abortCacheFlush</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.211">abortCacheFlush</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.210">abortCacheFlush</a>(byte[]&nbsp;encodedRegionName)</pre>
 <div class="block">Abort a cache flush. Call if the flush fails. Note that the only recovery
  for an aborted flush currently is a restart of the regionserver so the
  snapshot content dropped by the failure gets restored to the memstore.</div>
@@ -666,7 +660,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.216">getCoprocessorHost</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.215">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Coprocessor host.</dd>
@@ -680,7 +674,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.htm
 <li class="blockList">
 <h4>getEarliestMemStoreSeqNum</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.227">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName)</pre>
+long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.226">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since version 1.2.0. Removing because not used and exposes subtle internal
  workings. Use <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html#getEarliestMemStoreSeqNum-byte:A-byte:A-"><code>getEarliestMemStoreSeqNum(byte[], byte[])</code></a></span></div>
 <div class="block">Gets the earliest unflushed sequence id in the memstore for the region.</div>
@@ -698,7 +692,7 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#
 <ul class="blockList">
 <li class="blockList">
 <h4>getEarliestMemStoreSeqNum</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.235">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName,
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.234">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName,
                                byte[]&nbsp;familyName)</pre>
 <div class="block">Gets the earliest unflushed sequence id in the memstore for the store.</div>
 <dl>
@@ -713,10 +707,10 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#
 <a name="toString--">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.244">toString</a>()</pre>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.243">toString</a>()</pre>
 <div class="block">Human readable identifying information about the state of this WAL.
  Implementors are encouraged to include information appropriate for debugging.
  Consumers are advised not to rely on the details of the returned String; it does
@@ -727,29 +721,6 @@ long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#
 </dl>
 </li>
 </ul>
-<a name="getTimestamp-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getTimestamp</h4>
-<pre>static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/wal/WAL.html#line.316">getTimestamp</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
-<div class="block">Split a WAL filename to get a start time. WALs usually have the time we start writing to them
- as part of their name, usually the suffix. Sometimes there will be an extra suffix as when it
- is a WAL for the meta table. For example, WALs might look like this
- <code>10.20.20.171%3A60020.1277499063250</code> where <code>1277499063250</code> is the
- timestamp. Could also be a meta WAL which adds a '.meta' suffix or a
- synchronous replication WAL which adds a '.syncrep' suffix. Check for these. File also may have
- no timestamp on it. For example the recovered.edits files are WALs but are named in ascending
- order. Here is an example: 0000000000000016310. Allow for this.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>name</code> - Name of the WAL file.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Timestamp or -1.</dd>
-</dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html
index 291087b..9b7a87b 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html
@@ -751,7 +751,7 @@
 <tr class="altColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><span class="typeNameLabel">AbstractFSWALProvider.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/wal/AbstractFSWALProvider.html#extractFileNumFromWAL-org.apache.hadoop.hbase.wal.WAL-">extractFileNumFromWAL</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)</code>
-<div class="block">It returns the file create timestamp from the file name.</div>
+<div class="block">It returns the file create timestamp (the 'FileNum') from the file name.</div>
 </td>
 </tr>
 <tr class="rowColor">
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 3a77775..188279e 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/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>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html b/devapidocs/src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html
index cf0867a..1ef7365 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.html
@@ -30,423 +30,426 @@
 <span class="sourceLineNo">022</span>import static org.apache.hadoop.hbase.favored.FavoredNodesPlan.Position.SECONDARY;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.apache.hadoop.hbase.favored.FavoredNodesPlan.Position.TERTIARY;<a name="line.23"></a>
 <span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.ArrayList;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Set;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.conf.Configuration;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.ServerName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.TableName;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.favored.FavoredNodesPlan.Position;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.slf4j.Logger;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.slf4j.LoggerFactory;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<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> * An implementation of the {@link org.apache.hadoop.hbase.master.LoadBalancer} that<a name="line.54"></a>
-<span class="sourceLineNo">055</span> * assigns favored nodes for each region. There is a Primary RegionServer that hosts<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * the region, and then there is Secondary and Tertiary RegionServers. Currently, the<a name="line.56"></a>
-<span class="sourceLineNo">057</span> * favored nodes information is used in creating HDFS files - the Primary RegionServer<a name="line.57"></a>
-<span class="sourceLineNo">058</span> * passes the primary, secondary, tertiary node addresses as hints to the<a name="line.58"></a>
-<span class="sourceLineNo">059</span> * DistributedFileSystem API for creating files on the filesystem. These nodes are<a name="line.59"></a>
-<span class="sourceLineNo">060</span> * treated as hints by the HDFS to place the blocks of the file. This alleviates the<a name="line.60"></a>
-<span class="sourceLineNo">061</span> * problem to do with reading from remote nodes (since we can make the Secondary<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * RegionServer as the new Primary RegionServer) after a region is recovered. This<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * should help provide consistent read latencies for the regions even when their<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * primary region servers die.<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>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.67"></a>
-<span class="sourceLineNo">068</span>public class FavoredNodeLoadBalancer extends BaseLoadBalancer implements FavoredNodesPromoter {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private static final Logger LOG = LoggerFactory.getLogger(FavoredNodeLoadBalancer.class);<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private RackManager rackManager;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private Configuration conf;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private FavoredNodesManager fnm;<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>  public void setConf(Configuration conf) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    this.conf = conf;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public synchronized void initialize() throws HBaseIOException {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    super.initialize();<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    super.setConf(conf);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.fnm = services.getFavoredNodesManager();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.rackManager = new RackManager(conf);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    super.setConf(conf);<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 List&lt;RegionPlan&gt; balanceTable(TableName tableName,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; loadOfOneTable) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    // TODO. Look at is whether Stochastic loadbalancer can be integrated with this<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    List&lt;RegionPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    // perform a scan of the meta to get the latest updates (if any)<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    SnapshotOfRegionAssignmentFromMeta snaphotOfRegionAssignment =<a name="line.95"></a>
-<span class="sourceLineNo">096</span>        new SnapshotOfRegionAssignmentFromMeta(super.services.getConnection());<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    try {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      snaphotOfRegionAssignment.initialize();<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    } catch (IOException ie) {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      LOG.warn("Not running balancer since exception was thrown " + ie);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      return plans;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    // This is not used? Findbugs says so: Map&lt;ServerName, ServerName&gt;<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    // serverNameToServerNameWithoutCode = new HashMap&lt;&gt;();<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    Map&lt;ServerName, ServerName&gt; serverNameWithoutCodeToServerName = new HashMap&lt;&gt;();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    ServerManager serverMgr = super.services.getServerManager();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    for (ServerName sn : serverMgr.getOnlineServersList()) {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      ServerName s = ServerName.valueOf(sn.getHostname(), sn.getPort(), ServerName.NON_STARTCODE);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      // FindBugs complains about useless store! serverNameToServerNameWithoutCode.put(sn, s);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>      serverNameWithoutCodeToServerName.put(s, sn);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    }<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : loadOfOneTable.entrySet()) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      ServerName currentServer = entry.getKey();<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      // get a server without the startcode for the currentServer<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      ServerName currentServerWithoutStartCode = ServerName.valueOf(currentServer.getHostname(),<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        currentServer.getPort(), ServerName.NON_STARTCODE);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      List&lt;RegionInfo&gt; list = entry.getValue();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      for (RegionInfo region : list) {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>        if (!FavoredNodesManager.isFavoredNodeApplicable(region)) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>          continue;<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        List&lt;ServerName&gt; favoredNodes = fnm.getFavoredNodes(region);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        if (favoredNodes == null || favoredNodes.get(0).equals(currentServerWithoutStartCode)) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>          continue; // either favorednodes does not exist or we are already on the primary node<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        ServerName destination = null;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        // check whether the primary is available<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(0));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        if (destination == null) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>          // check whether the region is on secondary/tertiary<a name="line.130"></a>
-<span class="sourceLineNo">131</span>          if (currentServerWithoutStartCode.equals(favoredNodes.get(1))<a name="line.131"></a>
-<span class="sourceLineNo">132</span>              || currentServerWithoutStartCode.equals(favoredNodes.get(2))) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>            continue;<a name="line.133"></a>
-<span class="sourceLineNo">134</span>          }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          // the region is currently on none of the favored nodes<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          // get it on one of them if possible<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          ServerMetrics l1 = super.services.getServerManager()<a name="line.137"></a>
-<span class="sourceLineNo">138</span>              .getLoad(serverNameWithoutCodeToServerName.get(favoredNodes.get(1)));<a name="line.138"></a>
-<span class="sourceLineNo">139</span>          ServerMetrics l2 = super.services.getServerManager()<a name="line.139"></a>
-<span class="sourceLineNo">140</span>              .getLoad(serverNameWithoutCodeToServerName.get(favoredNodes.get(2)));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>          if (l1 != null &amp;&amp; l2 != null) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>            if (l1.getRegionMetrics().size() &gt; l2.getRegionMetrics().size()) {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>              destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(2));<a name="line.143"></a>
-<span class="sourceLineNo">144</span>            } else {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>              destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(1));<a name="line.145"></a>
-<span class="sourceLineNo">146</span>            }<a name="line.146"></a>
-<span class="sourceLineNo">147</span>          } else if (l1 != null) {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>            destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(1));<a name="line.148"></a>
-<span class="sourceLineNo">149</span>          } else if (l2 != null) {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(2));<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><a name="line.153"></a>
-<span class="sourceLineNo">154</span>        if (destination != null) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          RegionPlan plan = new RegionPlan(region, currentServer, destination);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          plans.add(plan);<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>    return plans;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @Override<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; roundRobinAssignment(List&lt;RegionInfo&gt; regions,<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      List&lt;ServerName&gt; servers) throws HBaseIOException {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMap;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    try {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>      FavoredNodeAssignmentHelper assignmentHelper =<a name="line.168"></a>
-<span class="sourceLineNo">169</span>          new FavoredNodeAssignmentHelper(servers, rackManager);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      assignmentHelper.initialize();<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      if (!assignmentHelper.canPlaceFavoredNodes()) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>        return super.roundRobinAssignment(regions, servers);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      // Segregate the regions into two types:<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      // 1. The regions that have favored node assignment, and where at least<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      //    one of the favored node is still alive. In this case, try to adhere<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      //    to the current favored nodes assignment as much as possible - i.e.,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      //    if the current primary is gone, then make the secondary or tertiary<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      //    as the new host for the region (based on their current load).<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      //    Note that we don't change the favored<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      //    node assignments here (even though one or more favored node is currently<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      //    down). It is up to the balanceCluster to do this hard work. The HDFS<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      //    can handle the fact that some nodes in the favored nodes hint is down<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      //    It'd allocate some other DNs. In combination with stale settings for HDFS,<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      //    we should be just fine.<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // 2. The regions that currently don't have favored node assignment. We will<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      //    need to come up with favored nodes assignments for them. The corner case<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      //    in (1) above is that all the nodes are unavailable and in that case, we<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      //    will note that this region doesn't have favored nodes.<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      Pair&lt;Map&lt;ServerName,List&lt;RegionInfo&gt;&gt;, List&lt;RegionInfo&gt;&gt; segregatedRegions =<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          segregateRegionsAndAssignRegionsWithFavoredNodes(regions, servers);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Map&lt;ServerName,List&lt;RegionInfo&gt;&gt; regionsWithFavoredNodesMap = segregatedRegions.getFirst();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      List&lt;RegionInfo&gt; regionsWithNoFavoredNodes = segregatedRegions.getSecond();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      assignmentMap = new HashMap&lt;&gt;();<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      roundRobinAssignmentImpl(assignmentHelper, assignmentMap, regionsWithNoFavoredNodes,<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          servers);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      // merge the assignment maps<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      assignmentMap.putAll(regionsWithFavoredNodesMap);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    } catch (Exception ex) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      LOG.warn("Encountered exception while doing favored-nodes assignment " + ex +<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          " Falling back to regular assignment");<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      assignmentMap = super.roundRobinAssignment(regions, servers);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    return assignmentMap;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  @Override<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  public ServerName randomAssignment(RegionInfo regionInfo, List&lt;ServerName&gt; servers)<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      throws HBaseIOException {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    try {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      FavoredNodeAssignmentHelper assignmentHelper =<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          new FavoredNodeAssignmentHelper(servers, rackManager);<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      assignmentHelper.initialize();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      ServerName primary = super.randomAssignment(regionInfo, servers);<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      if (!FavoredNodesManager.isFavoredNodeApplicable(regionInfo)<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          || !assignmentHelper.canPlaceFavoredNodes()) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        return primary;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      List&lt;ServerName&gt; favoredNodes = fnm.getFavoredNodes(regionInfo);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // check if we have a favored nodes mapping for this region and if so, return<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      // a server from the favored nodes list if the passed 'servers' contains this<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      // server as well (available servers, that is)<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      if (favoredNodes != null) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        for (ServerName s : favoredNodes) {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>          ServerName serverWithLegitStartCode = availableServersContains(servers, s);<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          if (serverWithLegitStartCode != null) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            return serverWithLegitStartCode;<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>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      List&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;(1);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      regions.add(regionInfo);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      Map&lt;RegionInfo, ServerName&gt; primaryRSMap = new HashMap&lt;&gt;(1);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      primaryRSMap.put(regionInfo, primary);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      assignSecondaryAndTertiaryNodesForRegion(assignmentHelper, regions, primaryRSMap);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      return primary;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    } catch (Exception ex) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      LOG.warn("Encountered exception while doing favored-nodes (random)assignment " + ex +<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          " Falling back to regular assignment");<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      return super.randomAssignment(regionInfo, servers);<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><a name="line.243"></a>
-<span class="sourceLineNo">244</span>  private Pair&lt;Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;, List&lt;RegionInfo&gt;&gt;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  segregateRegionsAndAssignRegionsWithFavoredNodes(List&lt;RegionInfo&gt; regions,<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      List&lt;ServerName&gt; availableServers) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMapForFavoredNodes = new HashMap&lt;&gt;(regions.size() / 2);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    List&lt;RegionInfo&gt; regionsWithNoFavoredNodes = new ArrayList&lt;&gt;(regions.size()/2);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    for (RegionInfo region : regions) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      List&lt;ServerName&gt; favoredNodes = fnm.getFavoredNodes(region);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      ServerName primaryHost = null;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      ServerName secondaryHost = null;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      ServerName tertiaryHost = null;<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      if (favoredNodes != null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        for (ServerName s : favoredNodes) {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          ServerName serverWithLegitStartCode = availableServersContains(availableServers, s);<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          if (serverWithLegitStartCode != null) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>            FavoredNodesPlan.Position position =<a name="line.258"></a>
-<span class="sourceLineNo">259</span>                FavoredNodesPlan.getFavoredServerPosition(favoredNodes, s);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>            if (Position.PRIMARY.equals(position)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>              primaryHost = serverWithLegitStartCode;<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            } else if (Position.SECONDARY.equals(position)) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>              secondaryHost = serverWithLegitStartCode;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>            } else if (Position.TERTIARY.equals(position)) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>              tertiaryHost = serverWithLegitStartCode;<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>
-<span class="sourceLineNo">268</span>        }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        assignRegionToAvailableFavoredNode(assignmentMapForFavoredNodes, region,<a name="line.269"></a>
-<span class="sourceLineNo">270</span>              primaryHost, secondaryHost, tertiaryHost);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      if (primaryHost == null &amp;&amp; secondaryHost == null &amp;&amp; tertiaryHost == null) {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        //all favored nodes unavailable<a name="line.273"></a>
-<span class="sourceLineNo">274</span>        regionsWithNoFavoredNodes.add(region);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return new Pair&lt;&gt;(assignmentMapForFavoredNodes, regionsWithNoFavoredNodes);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  // Do a check of the hostname and port and return the servername from the servers list<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  // that matched (the favoredNode will have a startcode of -1 but we want the real<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  // server with the legit startcode<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  private ServerName availableServersContains(List&lt;ServerName&gt; servers, ServerName favoredNode) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    for (ServerName server : servers) {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      if (ServerName.isSameAddress(favoredNode, server)) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        return server;<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return null;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>  private void assignRegionToAvailableFavoredNode(Map&lt;ServerName,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      List&lt;RegionInfo&gt;&gt; assignmentMapForFavoredNodes, RegionInfo region, ServerName primaryHost,<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      ServerName secondaryHost, ServerName tertiaryHost) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    if (primaryHost != null) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      addRegionToMap(assignmentMapForFavoredNodes, region, primaryHost);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    } else if (secondaryHost != null &amp;&amp; tertiaryHost != null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // assign the region to the one with a lower load<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      // (both have the desired hdfs blocks)<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      ServerName s;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      ServerMetrics tertiaryLoad = super.services.getServerManager().getLoad(tertiaryHost);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      ServerMetrics secondaryLoad = super.services.getServerManager().getLoad(secondaryHost);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      if (secondaryLoad.getRegionMetrics().size() &lt; tertiaryLoad.getRegionMetrics().size()) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        s = secondaryHost;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      } else {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        s = tertiaryHost;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      addRegionToMap(assignmentMapForFavoredNodes, region, s);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    } else if (secondaryHost != null) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      addRegionToMap(assignmentMapForFavoredNodes, region, secondaryHost);<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    } else if (tertiaryHost != null) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      addRegionToMap(assignmentMapForFavoredNodes, region, tertiaryHost);<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>  private void addRegionToMap(Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMapForFavoredNodes,<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      RegionInfo region, ServerName host) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    List&lt;RegionInfo&gt; regionsOnServer = null;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    if ((regionsOnServer = assignmentMapForFavoredNodes.get(host)) == null) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      regionsOnServer = new ArrayList&lt;&gt;();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      assignmentMapForFavoredNodes.put(host, regionsOnServer);<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    regionsOnServer.add(region);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
-<span class="sourceLineNo">325</span><a name="line.325"></a>
-<span class="sourceLineNo">326</span>  @Override<a name="line.326"></a>
-<span class="sourceLineNo">327</span>  public synchronized List&lt;ServerName&gt; getFavoredNodes(RegionInfo regionInfo) {<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    return this.fnm.getFavoredNodes(regionInfo);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>  private void roundRobinAssignmentImpl(FavoredNodeAssignmentHelper assignmentHelper,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMap,<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      List&lt;RegionInfo&gt; regions, List&lt;ServerName&gt; servers) throws IOException {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    Map&lt;RegionInfo, ServerName&gt; primaryRSMap = new HashMap&lt;&gt;();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // figure the primary RSs<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    assignmentHelper.placePrimaryRSAsRoundRobin(assignmentMap, primaryRSMap, regions);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    assignSecondaryAndTertiaryNodesForRegion(assignmentHelper, regions, primaryRSMap);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  private void assignSecondaryAndTertiaryNodesForRegion(<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      FavoredNodeAssignmentHelper assignmentHelper,<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      List&lt;RegionInfo&gt; regions, Map&lt;RegionInfo, ServerName&gt; primaryRSMap) throws IOException {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    // figure the secondary and tertiary RSs<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    Map&lt;RegionInfo, ServerName[]&gt; secondaryAndTertiaryRSMap =<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        assignmentHelper.placeSecondaryAndTertiaryRS(primaryRSMap);<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>    Map&lt;RegionInfo, List&lt;ServerName&gt;&gt; regionFNMap = Maps.newHashMap();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    // now record all the assignments so that we can serve queries later<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    for (RegionInfo region : regions) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      // Store the favored nodes without startCode for the ServerName objects<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      // We don't care about the startcode; but only the hostname really<a name="line.351"></a>
-<span class="sourceLineNo">352</span>      List&lt;ServerName&gt; favoredNodesForRegion = new ArrayList&lt;&gt;(3);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      ServerName sn = primaryRSMap.get(region);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      favoredNodesForRegion.add(ServerName.valueOf(sn.getHostname(), sn.getPort(),<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          ServerName.NON_STARTCODE));<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      ServerName[] secondaryAndTertiaryNodes = secondaryAndTertiaryRSMap.get(region);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      if (secondaryAndTertiaryNodes != null) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>        favoredNodesForRegion.add(ServerName.valueOf(secondaryAndTertiaryNodes[0].getHostname(),<a name="line.358"></a>
-<span class="sourceLineNo">359</span>            secondaryAndTertiaryNodes[0].getPort(), ServerName.NON_STARTCODE));<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        favoredNodesForRegion.add(ServerName.valueOf(secondaryAndTertiaryNodes[1].getHostname(),<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            secondaryAndTertiaryNodes[1].getPort(), ServerName.NON_STARTCODE));<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      regionFNMap.put(region, favoredNodesForRegion);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    fnm.updateFavoredNodes(regionFNMap);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  /*<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * Generate Favored Nodes for daughters during region split.<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   *<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * If the parent does not have FN, regenerates them for the daughters.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   *<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * If the parent has FN, inherit two FN from parent for each daughter and generate the remaining.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * The primary FN for both the daughters should be the same as parent. Inherit the secondary<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * FN from the parent but keep it different for each daughter. Choose the remaining FN<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * randomly. This would give us better distribution over a period of time after enough splits.<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   */<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public void generateFavoredNodesForDaughter(List&lt;ServerName&gt; servers, RegionInfo parent,<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      RegionInfo regionA, RegionInfo regionB) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>    Map&lt;RegionInfo, List&lt;ServerName&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    FavoredNodeAssignmentHelper helper = new FavoredNodeAssignmentHelper(servers, rackManager);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    helper.initialize();<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>    List&lt;ServerName&gt; parentFavoredNodes = getFavoredNodes(parent);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    if (parentFavoredNodes == null) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>      LOG.debug("Unable to find favored nodes for parent, " + parent<a name="line.388"></a>
-<span class="sourceLineNo">389</span>          + " generating new favored nodes for daughter");<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      result.put(regionA, helper.generateFavoredNodes(regionA));<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      result.put(regionB, helper.generateFavoredNodes(regionB));<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>    } else {<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>      // Lets get the primary and secondary from parent for regionA<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      Set&lt;ServerName&gt; regionAFN =<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          getInheritedFNForDaughter(helper, parentFavoredNodes, PRIMARY, SECONDARY);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      result.put(regionA, Lists.newArrayList(regionAFN));<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span>      // Lets get the primary and tertiary from parent for regionB<a name="line.400"></a>
-<span class="sourceLineNo">401</span>      Set&lt;ServerName&gt; regionBFN =<a name="line.401"></a>
-<span class="sourceLineNo">402</span>          getInheritedFNForDaughter(helper, parentFavoredNodes, PRIMARY, TERTIARY);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      result.put(regionB, Lists.newArrayList(regionBFN));<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>    fnm.updateFavoredNodes(result);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
+<span class="sourceLineNo">025</span>import edu.umd.cs.findbugs.annotations.NonNull;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.ArrayList;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.Set;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseInterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.ServerName;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.favored.FavoredNodesPlan.Position;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.master.ServerManager;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.slf4j.Logger;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.slf4j.LoggerFactory;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hbase.thirdparty.com.google.common.collect.Maps;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<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> * An implementation of the {@link org.apache.hadoop.hbase.master.LoadBalancer} that<a name="line.56"></a>
+<span class="sourceLineNo">057</span> * assigns favored nodes for each region. There is a Primary RegionServer that hosts<a name="line.57"></a>
+<span class="sourceLineNo">058</span> * the region, and then there is Secondary and Tertiary RegionServers. Currently, the<a name="line.58"></a>
+<span class="sourceLineNo">059</span> * favored nodes information is used in creating HDFS files - the Primary RegionServer<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * passes the primary, secondary, tertiary node addresses as hints to the<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * DistributedFileSystem API for creating files on the filesystem. These nodes are<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * treated as hints by the HDFS to place the blocks of the file. This alleviates the<a name="line.62"></a>
+<span class="sourceLineNo">063</span> * problem to do with reading from remote nodes (since we can make the Secondary<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * RegionServer as the new Primary RegionServer) after a region is recovered. This<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * should help provide consistent read latencies for the regions even when their<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * primary region servers die.<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>@InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.69"></a>
+<span class="sourceLineNo">070</span>public class FavoredNodeLoadBalancer extends BaseLoadBalancer implements FavoredNodesPromoter {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private static final Logger LOG = LoggerFactory.getLogger(FavoredNodeLoadBalancer.class);<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private RackManager rackManager;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private Configuration conf;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private FavoredNodesManager fnm;<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>  public void setConf(Configuration conf) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    this.conf = conf;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  }<a name="line.80"></a>
+<span class="sourceLineNo">081</span><a name="line.81"></a>
+<span class="sourceLineNo">082</span>  @Override<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public synchronized void initialize() throws HBaseIOException {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    super.initialize();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    super.setConf(conf);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    this.fnm = services.getFavoredNodesManager();<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    this.rackManager = new RackManager(conf);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    super.setConf(conf);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  }<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>  @Override<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public List&lt;RegionPlan&gt; balanceTable(TableName tableName,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; loadOfOneTable) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    // TODO. Look at is whether Stochastic loadbalancer can be integrated with this<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    List&lt;RegionPlan&gt; plans = new ArrayList&lt;&gt;();<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    // perform a scan of the meta to get the latest updates (if any)<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    SnapshotOfRegionAssignmentFromMeta snaphotOfRegionAssignment =<a name="line.97"></a>
+<span class="sourceLineNo">098</span>        new SnapshotOfRegionAssignmentFromMeta(super.services.getConnection());<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    try {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      snaphotOfRegionAssignment.initialize();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    } catch (IOException ie) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      LOG.warn("Not running balancer since exception was thrown " + ie);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      return plans;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    }<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    // This is not used? Findbugs says so: Map&lt;ServerName, ServerName&gt;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    // serverNameToServerNameWithoutCode = new HashMap&lt;&gt;();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    Map&lt;ServerName, ServerName&gt; serverNameWithoutCodeToServerName = new HashMap&lt;&gt;();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    ServerManager serverMgr = super.services.getServerManager();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    for (ServerName sn : serverMgr.getOnlineServersList()) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      ServerName s = ServerName.valueOf(sn.getHostname(), sn.getPort(), ServerName.NON_STARTCODE);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      // FindBugs complains about useless store! serverNameToServerNameWithoutCode.put(sn, s);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      serverNameWithoutCodeToServerName.put(s, sn);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : loadOfOneTable.entrySet()) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      ServerName currentServer = entry.getKey();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      // get a server without the startcode for the currentServer<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      ServerName currentServerWithoutStartCode = ServerName.valueOf(currentServer.getHostname(),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        currentServer.getPort(), ServerName.NON_STARTCODE);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      List&lt;RegionInfo&gt; list = entry.getValue();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      for (RegionInfo region : list) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        if (!FavoredNodesManager.isFavoredNodeApplicable(region)) {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>          continue;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        List&lt;ServerName&gt; favoredNodes = fnm.getFavoredNodes(region);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        if (favoredNodes == null || favoredNodes.get(0).equals(currentServerWithoutStartCode)) {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          continue; // either favorednodes does not exist or we are already on the primary node<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        ServerName destination = null;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        // check whether the primary is available<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(0));<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        if (destination == null) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>          // check whether the region is on secondary/tertiary<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          if (currentServerWithoutStartCode.equals(favoredNodes.get(1))<a name="line.133"></a>
+<span class="sourceLineNo">134</span>              || currentServerWithoutStartCode.equals(favoredNodes.get(2))) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            continue;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>          // the region is currently on none of the favored nodes<a name="line.137"></a>
+<span class="sourceLineNo">138</span>          // get it on one of them if possible<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          ServerMetrics l1 = super.services.getServerManager()<a name="line.139"></a>
+<span class="sourceLineNo">140</span>              .getLoad(serverNameWithoutCodeToServerName.get(favoredNodes.get(1)));<a name="line.140"></a>
+<span class="sourceLineNo">141</span>          ServerMetrics l2 = super.services.getServerManager()<a name="line.141"></a>
+<span class="sourceLineNo">142</span>              .getLoad(serverNameWithoutCodeToServerName.get(favoredNodes.get(2)));<a name="line.142"></a>
+<span class="sourceLineNo">143</span>          if (l1 != null &amp;&amp; l2 != null) {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>            if (l1.getRegionMetrics().size() &gt; l2.getRegionMetrics().size()) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>              destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(2));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>            } else {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>              destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(1));<a name="line.147"></a>
+<span class="sourceLineNo">148</span>            }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>          } else if (l1 != null) {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>            destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(1));<a name="line.150"></a>
+<span class="sourceLineNo">151</span>          } else if (l2 != null) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>            destination = serverNameWithoutCodeToServerName.get(favoredNodes.get(2));<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>
+<span class="sourceLineNo">156</span>        if (destination != null) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>          RegionPlan plan = new RegionPlan(region, currentServer, destination);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>          plans.add(plan);<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>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    return plans;<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">165</span>  @Override<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  @NonNull<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  public Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; roundRobinAssignment(List&lt;RegionInfo&gt; regions,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      List&lt;ServerName&gt; servers) throws HBaseIOException {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMap;<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    try {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      FavoredNodeAssignmentHelper assignmentHelper =<a name="line.171"></a>
+<span class="sourceLineNo">172</span>          new FavoredNodeAssignmentHelper(servers, rackManager);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      assignmentHelper.initialize();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      if (!assignmentHelper.canPlaceFavoredNodes()) {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        return super.roundRobinAssignment(regions, servers);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      }<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      // Segregate the regions into two types:<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      // 1. The regions that have favored node assignment, and where at least<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      //    one of the favored node is still alive. In this case, try to adhere<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      //    to the current favored nodes assignment as much as possible - i.e.,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      //    if the current primary is gone, then make the secondary or tertiary<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      //    as the new host for the region (based on their current load).<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      //    Note that we don't change the favored<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      //    node assignments here (even though one or more favored node is currently<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      //    down). It is up to the balanceCluster to do this hard work. The HDFS<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      //    can handle the fact that some nodes in the favored nodes hint is down<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      //    It'd allocate some other DNs. In combination with stale settings for HDFS,<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      //    we should be just fine.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // 2. The regions that currently don't have favored node assignment. We will<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      //    need to come up with favored nodes assignments for them. The corner case<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      //    in (1) above is that all the nodes are unavailable and in that case, we<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      //    will note that this region doesn't have favored nodes.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      Pair&lt;Map&lt;ServerName,List&lt;RegionInfo&gt;&gt;, List&lt;RegionInfo&gt;&gt; segregatedRegions =<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          segregateRegionsAndAssignRegionsWithFavoredNodes(regions, servers);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      Map&lt;ServerName,List&lt;RegionInfo&gt;&gt; regionsWithFavoredNodesMap = segregatedRegions.getFirst();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      List&lt;RegionInfo&gt; regionsWithNoFavoredNodes = segregatedRegions.getSecond();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      assignmentMap = new HashMap&lt;&gt;();<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      roundRobinAssignmentImpl(assignmentHelper, assignmentMap, regionsWithNoFavoredNodes,<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          servers);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      // merge the assignment maps<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      assignmentMap.putAll(regionsWithFavoredNodesMap);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    } catch (Exception ex) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      LOG.warn("Encountered exception while doing favored-nodes assignment " + ex +<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          " Falling back to regular assignment");<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      assignmentMap = super.roundRobinAssignment(regions, servers);<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return assignmentMap;<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>  @Override<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  public ServerName randomAssignment(RegionInfo regionInfo, List&lt;ServerName&gt; servers)<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      throws HBaseIOException {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    try {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      FavoredNodeAssignmentHelper assignmentHelper =<a name="line.214"></a>
+<span class="sourceLineNo">215</span>          new FavoredNodeAssignmentHelper(servers, rackManager);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      assignmentHelper.initialize();<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      ServerName primary = super.randomAssignment(regionInfo, servers);<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      if (!FavoredNodesManager.isFavoredNodeApplicable(regionInfo)<a name="line.218"></a>
+<span class="sourceLineNo">219</span>          || !assignmentHelper.canPlaceFavoredNodes()) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        return primary;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      }<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      List&lt;ServerName&gt; favoredNodes = fnm.getFavoredNodes(regionInfo);<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      // check if we have a favored nodes mapping for this region and if so, return<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      // a server from the favored nodes list if the passed 'servers' contains this<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      // server as well (available servers, that is)<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      if (favoredNodes != null) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        for (ServerName s : favoredNodes) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          ServerName serverWithLegitStartCode = availableServersContains(servers, s);<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          if (serverWithLegitStartCode != null) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>            return serverWithLegitStartCode;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>          }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        }<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      List&lt;RegionInfo&gt; regions = new ArrayList&lt;&gt;(1);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      regions.add(regionInfo);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      Map&lt;RegionInfo, ServerName&gt; primaryRSMap = new HashMap&lt;&gt;(1);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      primaryRSMap.put(regionInfo, primary);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      assignSecondaryAndTertiaryNodesForRegion(assignmentHelper, regions, primaryRSMap);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      return primary;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    } catch (Exception ex) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      LOG.warn("Encountered exception while doing favored-nodes (random)assignment " + ex +<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          " Falling back to regular assignment");<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      return super.randomAssignment(regionInfo, servers);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  }<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>  private Pair&lt;Map&lt;ServerName, List&lt;RegionInfo&gt;&gt;, List&lt;RegionInfo&gt;&gt;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  segregateRegionsAndAssignRegionsWithFavoredNodes(List&lt;RegionInfo&gt; regions,<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      List&lt;ServerName&gt; availableServers) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMapForFavoredNodes = new HashMap&lt;&gt;(regions.size() / 2);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;RegionInfo&gt; regionsWithNoFavoredNodes = new ArrayList&lt;&gt;(regions.size()/2);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    for (RegionInfo region : regions) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      List&lt;ServerName&gt; favoredNodes = fnm.getFavoredNodes(region);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      ServerName primaryHost = null;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      ServerName secondaryHost = null;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      ServerName tertiaryHost = null;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      if (favoredNodes != null) {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        for (ServerName s : favoredNodes) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          ServerName serverWithLegitStartCode = availableServersContains(availableServers, s);<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          if (serverWithLegitStartCode != null) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            FavoredNodesPlan.Position position =<a name="line.261"></a>
+<span class="sourceLineNo">262</span>                FavoredNodesPlan.getFavoredServerPosition(favoredNodes, s);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            if (Position.PRIMARY.equals(position)) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>              primaryHost = serverWithLegitStartCode;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>            } else if (Position.SECONDARY.equals(position)) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>              secondaryHost = serverWithLegitStartCode;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>            } else if (Position.TERTIARY.equals(position)) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>              tertiaryHost = serverWithLegitStartCode;<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>        assignRegionToAvailableFavoredNode(assignmentMapForFavoredNodes, region,<a name="line.272"></a>
+<span class="sourceLineNo">273</span>              primaryHost, secondaryHost, tertiaryHost);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      if (primaryHost == null &amp;&amp; secondaryHost == null &amp;&amp; tertiaryHost == null) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>        //all favored nodes unavailable<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        regionsWithNoFavoredNodes.add(region);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    return new Pair&lt;&gt;(assignmentMapForFavoredNodes, regionsWithNoFavoredNodes);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
+<span class="sourceLineNo">282</span><a name="line.282"></a>
+<span class="sourceLineNo">283</span>  // Do a check of the hostname and port and return the servername from the servers list<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  // that matched (the favoredNode will have a startcode of -1 but we want the real<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  // server with the legit startcode<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  private ServerName availableServersContains(List&lt;ServerName&gt; servers, ServerName favoredNode) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    for (ServerName server : servers) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      if (ServerName.isSameAddress(favoredNode, server)) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        return server;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    }<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    return null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span>  private void assignRegionToAvailableFavoredNode(Map&lt;ServerName,<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      List&lt;RegionInfo&gt;&gt; assignmentMapForFavoredNodes, RegionInfo region, ServerName primaryHost,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      ServerName secondaryHost, ServerName tertiaryHost) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    if (primaryHost != null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      addRegionToMap(assignmentMapForFavoredNodes, region, primaryHost);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    } else if (secondaryHost != null &amp;&amp; tertiaryHost != null) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      // assign the region to the one with a lower load<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      // (both have the desired hdfs blocks)<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      ServerName s;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      ServerMetrics tertiaryLoad = super.services.getServerManager().getLoad(tertiaryHost);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      ServerMetrics secondaryLoad = super.services.getServerManager().getLoad(secondaryHost);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      if (secondaryLoad.getRegionMetrics().size() &lt; tertiaryLoad.getRegionMetrics().size()) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        s = secondaryHost;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      } else {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        s = tertiaryHost;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      addRegionToMap(assignmentMapForFavoredNodes, region, s);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    } else if (secondaryHost != null) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      addRegionToMap(assignmentMapForFavoredNodes, region, secondaryHost);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    } else if (tertiaryHost != null) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      addRegionToMap(assignmentMapForFavoredNodes, region, tertiaryHost);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>  private void addRegionToMap(Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMapForFavoredNodes,<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      RegionInfo region, ServerName host) {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    List&lt;RegionInfo&gt; regionsOnServer = null;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if ((regionsOnServer = assignmentMapForFavoredNodes.get(host)) == null) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      regionsOnServer = new ArrayList&lt;&gt;();<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      assignmentMapForFavoredNodes.put(host, regionsOnServer);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    regionsOnServer.add(region);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  @Override<a name="line.329"></a>
+<span class="sourceLineNo">330</span>  public synchronized List&lt;ServerName&gt; getFavoredNodes(RegionInfo regionInfo) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    return this.fnm.getFavoredNodes(regionInfo);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>  private void roundRobinAssignmentImpl(FavoredNodeAssignmentHelper assignmentHelper,<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignmentMap,<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      List&lt;RegionInfo&gt; regions, List&lt;ServerName&gt; servers) throws IOException {<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    Map&lt;RegionInfo, ServerName&gt; primaryRSMap = new HashMap&lt;&gt;();<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    // figure the primary RSs<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    assignmentHelper.placePrimaryRSAsRoundRobin(assignmentMap, primaryRSMap, regions);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    assignSecondaryAndTertiaryNodesForRegion(assignmentHelper, regions, primaryRSMap);<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  }<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private void assignSecondaryAndTertiaryNodesForRegion(<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      FavoredNodeAssignmentHelper assignmentHelper,<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      List&lt;RegionInfo&gt; regions, Map&lt;RegionInfo, ServerName&gt; primaryRSMap) throws IOException {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    // figure the secondary and tertiary RSs<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    Map&lt;RegionInfo, ServerName[]&gt; secondaryAndTertiaryRSMap =<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        assignmentHelper.placeSecondaryAndTertiaryRS(primaryRSMap);<a name="line.348"></a>
+<span class="sourceLineNo">349</span><a name="line.349"></a>
+<span class="sourceLineNo">350</span>    Map&lt;RegionInfo, List&lt;ServerName&gt;&gt; regionFNMap = Maps.newHashMap();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    // now record all the assignments so that we can serve queries later<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    for (RegionInfo region : regions) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      // Store the favored nodes without startCode for the ServerName objects<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      // We don't care about the startcode; but only the hostname really<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      List&lt;ServerName&gt; favoredNodesForRegion = new ArrayList&lt;&gt;(3);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      ServerName sn = primaryRSMap.get(region);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      favoredNodesForRegion.add(ServerName.valueOf(sn.getHostname(), sn.getPort(),<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          ServerName.NON_STARTCODE));<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      ServerName[] secondaryAndTertiaryNodes = secondaryAndTertiaryRSMap.get(region);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      if (secondaryAndTertiaryNodes != null) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        favoredNodesForRegion.add(ServerName.valueOf(secondaryAndTertiaryNodes[0].getHostname(),<a name="line.361"></a>
+<span class="sourceLineNo">362</span>            secondaryAndTertiaryNodes[0].getPort(), ServerName.NON_STARTCODE));<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        favoredNodesForRegion.add(ServerName.valueOf(secondaryAndTertiaryNodes[1].getHostname(),<a name="line.363"></a>
+<span class="sourceLineNo">364</span>            secondaryAndTertiaryNodes[1].getPort(), ServerName.NON_STARTCODE));<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      regionFNMap.put(region, favoredNodesForRegion);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    fnm.updateFavoredNodes(regionFNMap);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  }<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>   * Generate Favored Nodes for daughters during region split.<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   *<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * If the parent does not have FN, regenerates them for the daughters.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   *<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If the parent has FN, inherit two FN from parent for each daughter and generate the remaining.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * The primary FN for both the daughters should be the same as parent. Inherit the secondary<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * FN from the parent but keep it different for each daughter. Choose the remaining FN<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * randomly. This would give us better distribution over a period of time after enough splits.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  @Override<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public void generateFavoredNodesForDaughter(List&lt;ServerName&gt; servers, RegionInfo parent,<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      RegionInfo regionA, RegionInfo regionB) throws IOException {<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span>    Map&lt;RegionInfo, List&lt;ServerName&gt;&gt; result = new HashMap&lt;&gt;();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    FavoredNodeAssignmentHelper helper = new FavoredNodeAssignmentHelper(servers, rackManager);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    helper.initialize();<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span>    List&lt;ServerName&gt; parentFavoredNodes = getFavoredNodes(parent);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    if (parentFavoredNodes == null) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      LOG.debug("Unable to find favored nodes for parent, " + parent<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          + " generating new favored nodes for daughter");<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      result.put(regionA, helper.generateFavoredNodes(regionA));<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      result.put(regionB, helper.generateFavoredNodes(regionB));<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>    } else {<a name="line.396"></a>
+<span class="sourceLineNo">397</span><a name="line.397"></a>
+<span class="sourceLineNo">398</span>      // Lets get the primary and secondary from parent for regionA<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      Set&lt;ServerName&gt; regionAFN =<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          getInheritedFNForDaughter(helper, parentFavoredNodes, PRIMARY, SECONDARY);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      result.put(regionA, Lists.newArrayList(regionAFN));<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>      // Lets get the primary and tertiary from parent for regionB<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      Set&lt;ServerName&gt; regionBFN =<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          getInheritedFNForDaughter(helper, parentFavoredNodes, PRIMARY, TERTIARY);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      result.put(regionB, Lists.newArrayList(regionBFN));<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>  private Set&lt;ServerName&gt; getInheritedFNForDaughter(FavoredNodeAssignmentHelper helper,<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      List&lt;ServerName&gt; parentFavoredNodes, Position primary, Position secondary)<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      throws IOException {<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    Set&lt;ServerName&gt; daughterFN = Sets.newLinkedHashSet();<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    if (parentFavoredNodes.size() &gt;= primary.ordinal()) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      daughterFN.add(parentFavoredNodes.get(primary.ordinal()));<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    }<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>    if (parentFavoredNodes.size() &gt;= secondary.ordinal()) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>      daughterFN.add(parentFavoredNodes.get(secondary.ordinal()));<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>    while (daughterFN.size() &lt; FavoredNodeAssignmentHelper.FAVORED_NODES_NUM) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      ServerName newNode = helper.generateMissingFavoredNode(Lists.newArrayList(daughterFN));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>      daughterFN.add(newNode);<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    return daughterFN;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  }<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>  /*<a name="line.429"></a>
-<span class="sourceLineNo">430</span>   * Generate favored nodes for a region during merge. Choose the FN from one of the sources to<a name="line.430"></a>
-<span class="sourceLineNo">431</span>   * keep it simple.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>   */<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  public void generateFavoredNodesForMergedRegion(RegionInfo merged, RegionInfo [] mergeParents)<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      throws IOException {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    Map&lt;RegionInfo, List&lt;ServerName&gt;&gt; regionFNMap = Maps.newHashMap();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>    regionFNMap.put(merged, getFavoredNodes(mergeParents[0]));<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    fnm.updateFavoredNodes(regionFNMap);<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>}<a name="line.441"></a>
+<span class="sourceLineNo">409</span>    fnm.updateFavoredNodes(result);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  private Set&lt;ServerName&gt; getInheritedFNForDaughter(FavoredNodeAssignmentHelper helper,<a name="line.412"></a>
+<span class="sourceLineNo">413</span>      List&lt;ServerName&gt; parentFavoredNodes, Position primary, Position secondary)<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      throws IOException {<a name="line.414"></a>
+<span class="sourceLineNo">415</span><a name="line.415"></a>
+<span class="sourceLineNo">416</span>    Set&lt;ServerName&gt; daughterFN = Sets.newLinkedHashSet();<a name="line.416"></a>
+<span class="sourceLineNo">417</span>    if (parentFavoredNodes.size() &gt;= primary.ordinal()) {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      daughterFN.add(parentFavoredNodes.get(primary.ordinal()));<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    if (parentFavoredNodes.size() &gt;= secondary.ordinal()) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      daughterFN.add(parentFavoredNodes.get(secondary.ordinal()));<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
+<span class="sourceLineNo">424</span><a name="line.424"></a>
+<span class="sourceLineNo">425</span>    while (daughterFN.size() &lt; FavoredNodeAssignmentHelper.FAVORED_NODES_NUM) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      ServerName newNode = helper.generateMissingFavoredNode(Lists.newArrayList(daughterFN));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      daughterFN.add(newNode);<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    return daughterFN;<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>  /*<a name="line.432"></a>
+<span class="sourceLineNo">433</span>   * Generate favored nodes for a region during merge. Choose the FN from one of the sources to<a name="line.433"></a>
+<span class="sourceLineNo">434</span>   * keep it simple.<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>  public void generateFavoredNodesForMergedRegion(RegionInfo merged, RegionInfo [] mergeParents)<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      throws IOException {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>    Map&lt;RegionInfo, List&lt;ServerName&gt;&gt; regionFNMap = Maps.newHashMap();<a name="line.439"></a>
+<span class="sourceLineNo">440</span>    regionFNMap.put(merged, getFavoredNodes(mergeParents[0]));<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    fnm.updateFavoredNodes(regionFNMap);<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span>}<a name="line.444"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALKeyRecordReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALKeyRecordReader.html
index 89d67be..4d7e8d0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALKeyRecordReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALKeyRecordReader.html
@@ -344,7 +344,7 @@
 <span class="sourceLineNo">336</span><a name="line.336"></a>
 <span class="sourceLineNo">337</span>  static void addFile(List&lt;FileStatus&gt; result, LocatedFileStatus lfs, long startTime,<a name="line.337"></a>
 <span class="sourceLineNo">338</span>      long endTime) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long timestamp = WAL.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
+<span class="sourceLineNo">339</span>    long timestamp = AbstractFSWALProvider.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
 <span class="sourceLineNo">340</span>    if (timestamp &gt; 0) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      // Looks like a valid timestamp.<a name="line.341"></a>
 <span class="sourceLineNo">342</span>      if (timestamp &lt;= endTime &amp;&amp; timestamp &gt;= startTime) {<a name="line.342"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALRecordReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALRecordReader.html
index 89d67be..4d7e8d0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALRecordReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALRecordReader.html
@@ -344,7 +344,7 @@
 <span class="sourceLineNo">336</span><a name="line.336"></a>
 <span class="sourceLineNo">337</span>  static void addFile(List&lt;FileStatus&gt; result, LocatedFileStatus lfs, long startTime,<a name="line.337"></a>
 <span class="sourceLineNo">338</span>      long endTime) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long timestamp = WAL.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
+<span class="sourceLineNo">339</span>    long timestamp = AbstractFSWALProvider.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
 <span class="sourceLineNo">340</span>    if (timestamp &gt; 0) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      // Looks like a valid timestamp.<a name="line.341"></a>
 <span class="sourceLineNo">342</span>      if (timestamp &lt;= endTime &amp;&amp; timestamp &gt;= startTime) {<a name="line.342"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALSplit.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALSplit.html
index 89d67be..4d7e8d0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALSplit.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.WALSplit.html
@@ -344,7 +344,7 @@
 <span class="sourceLineNo">336</span><a name="line.336"></a>
 <span class="sourceLineNo">337</span>  static void addFile(List&lt;FileStatus&gt; result, LocatedFileStatus lfs, long startTime,<a name="line.337"></a>
 <span class="sourceLineNo">338</span>      long endTime) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long timestamp = WAL.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
+<span class="sourceLineNo">339</span>    long timestamp = AbstractFSWALProvider.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
 <span class="sourceLineNo">340</span>    if (timestamp &gt; 0) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      // Looks like a valid timestamp.<a name="line.341"></a>
 <span class="sourceLineNo">342</span>      if (timestamp &lt;= endTime &amp;&amp; timestamp &gt;= startTime) {<a name="line.342"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html
index 89d67be..4d7e8d0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/WALInputFormat.html
@@ -344,7 +344,7 @@
 <span class="sourceLineNo">336</span><a name="line.336"></a>
 <span class="sourceLineNo">337</span>  static void addFile(List&lt;FileStatus&gt; result, LocatedFileStatus lfs, long startTime,<a name="line.337"></a>
 <span class="sourceLineNo">338</span>      long endTime) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long timestamp = WAL.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
+<span class="sourceLineNo">339</span>    long timestamp = AbstractFSWALProvider.getTimestamp(lfs.getPath().getName());<a name="line.339"></a>
 <span class="sourceLineNo">340</span>    if (timestamp &gt; 0) {<a name="line.340"></a>
 <span class="sourceLineNo">341</span>      // Looks like a valid timestamp.<a name="line.341"></a>
 <span class="sourceLineNo">342</span>      if (timestamp &lt;= endTime &amp;&amp; timestamp &gt;= startTime) {<a name="line.342"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/LoadBalancer.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/LoadBalancer.html
index 7048ebc..dda846b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/LoadBalancer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/LoadBalancer.html
@@ -26,7 +26,7 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.master;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import edu.umd.cs.findbugs.annotations.Nullable;<a name="line.21"></a>
+<span class="sourceLineNo">021</span>import edu.umd.cs.findbugs.annotations.NonNull;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.List;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.Map;<a name="line.24"></a>
@@ -118,67 +118,68 @@
 <span class="sourceLineNo">110</span>   * Perform a Round Robin assignment of regions.<a name="line.110"></a>
 <span class="sourceLineNo">111</span>   * @return Map of servername to regioninfos<a name="line.111"></a>
 <span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; roundRobinAssignment(List&lt;RegionInfo&gt; regions,<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      List&lt;ServerName&gt; servers) throws IOException;<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>   * Assign regions to the previously hosting region server<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   * @return List of plans<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Nullable<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; retainAssignment(Map&lt;RegionInfo, ServerName&gt; regions,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      List&lt;ServerName&gt; servers) throws IOException;<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>   * Get a random region server from the list<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param regionInfo Region for which this selection is being done.<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  ServerName randomAssignment(RegionInfo regionInfo, List&lt;ServerName&gt; servers) throws IOException;<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>   * Initialize the load balancer. Must be called after setters.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   */<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  void initialize() throws IOException;<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>   * Marks the region as online at balancer.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  void regionOnline(RegionInfo regionInfo, ServerName sn);<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>   * Marks the region as offline at balancer.<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  void regionOffline(RegionInfo regionInfo);<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>   * Notification that config has changed<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>  void onConfigurationChange(Configuration conf);<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>   * If balancer needs to do initialization after Master has started up, lets do that here.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   */<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  void postMasterStartupInitialize();<a name="line.154"></a>
-<span class="sourceLineNo">155</span><a name="line.155"></a>
-<span class="sourceLineNo">156</span>  /*Updates balancer status tag reported to JMX*/<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  void updateBalancerStatus(boolean status);<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>   * @return true if Master carries regions<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  static boolean isTablesOnMaster(Configuration conf) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    return conf.getBoolean(TABLES_ON_MASTER, 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>  static boolean isSystemTablesOnlyOnMaster(Configuration conf) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return conf.getBoolean(SYSTEM_TABLES_ON_MASTER, false);<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>  static boolean isMasterCanHostUserRegions(Configuration conf) {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    return isTablesOnMaster(conf) &amp;&amp; !isSystemTablesOnlyOnMaster(conf);<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">113</span>  @NonNull<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; roundRobinAssignment(List&lt;RegionInfo&gt; regions,<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      List&lt;ServerName&gt; servers) throws IOException;<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>   * Assign regions to the previously hosting region server<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @return List of plans<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  @NonNull<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; retainAssignment(Map&lt;RegionInfo, ServerName&gt; regions,<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      List&lt;ServerName&gt; servers) throws IOException;<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>   * Get a random region server from the list<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   * @param regionInfo Region for which this selection is being done.<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  ServerName randomAssignment(RegionInfo regionInfo, List&lt;ServerName&gt; servers) throws IOException;<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>   * Initialize the load balancer. Must be called after setters.<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  void initialize() throws IOException;<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>   * Marks the region as online at balancer.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  void regionOnline(RegionInfo regionInfo, ServerName sn);<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>   * Marks the region as offline at balancer.<a name="line.142"></a>
+<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  void regionOffline(RegionInfo regionInfo);<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>   * Notification that config has changed<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>  void onConfigurationChange(Configuration conf);<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>   * If balancer needs to do initialization after Master has started up, lets do that here.<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  void postMasterStartupInitialize();<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>  /*Updates balancer status tag reported to JMX*/<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  void updateBalancerStatus(boolean status);<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>   * @return true if Master carries regions<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  static boolean isTablesOnMaster(Configuration conf) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return conf.getBoolean(TABLES_ON_MASTER, false);<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>  static boolean isSystemTablesOnlyOnMaster(Configuration conf) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    return conf.getBoolean(SYSTEM_TABLES_ON_MASTER, false);<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>  static boolean isMasterCanHostUserRegions(Configuration conf) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    return isTablesOnMaster(conf) &amp;&amp; !isSystemTablesOnlyOnMaster(conf);<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.DeadServerMetricRegionChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.DeadServerMetricRegionChore.html
index 95efc71..ff5f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.DeadServerMetricRegionChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.DeadServerMetricRegionChore.html
@@ -2173,129 +2173,125 @@
 <span class="sourceLineNo">2165</span>    final ProcedureEvent&lt;?&gt;[] events = new ProcedureEvent[regions.size()];<a name="line.2165"></a>
 <span class="sourceLineNo">2166</span>    final long st = System.currentTimeMillis();<a name="line.2166"></a>
 <span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    if (plan == null) {<a name="line.2168"></a>
+<span class="sourceLineNo">2168</span>    if (plan.isEmpty()) {<a name="line.2168"></a>
 <span class="sourceLineNo">2169</span>      throw new HBaseIOException("unable to compute plans for regions=" + regions.size());<a name="line.2169"></a>
 <span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
 <span class="sourceLineNo">2171</span><a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    if (plan.isEmpty()) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>      return;<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    int evcount = 0;<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      final ServerName server = entry.getKey();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        regionNode.setRegionLocation(server);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>          assignQueueLock.lock();<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          try {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>            pendingAssignQueue.add(regionNode);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          } finally {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>            assignQueueLock.unlock();<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          }<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }else {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    }<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span><a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    final long et = System.currentTimeMillis();<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    if (LOG.isTraceEnabled()) {<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>    }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span><a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    assignQueueLock.lock();<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>    try {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    } finally {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      assignQueueLock.unlock();<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>    }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span><a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   */<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    // RegionServerInfo that includes Version.<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        .stream()<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        .collect(Collectors.toList());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>    if (serverList.isEmpty()) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      return Collections.emptyList();<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    String highestVersion = Collections.max(serverList,<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return serverList.stream()<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>        .map(Pair::getFirst)<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        .collect(Collectors.toList());<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  @VisibleForTesting<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  MasterServices getMaster() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return master;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  /**<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   * @return a snapshot of rsReports<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>   */<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    synchronized (rsReports) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    return rsReportsSnapshot;<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span><a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>  /**<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * Provide regions state count for given table.<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   *<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * @param tableName TableName<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * @return region states count<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   */<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>    int openRegionsCount = 0;<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    int closedRegionCount = 0;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>    int ritCount = 0;<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    int splitRegionCount = 0;<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    int totalRegionCount = 0;<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    if (!isTableDisabled(tableName)) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>      for (RegionState regionState : states) {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>        if (regionState.isOpened()) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          openRegionsCount++;<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        } else if (regionState.isClosed()) {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>          closedRegionCount++;<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>        } else if (regionState.isSplit()) {<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>          splitRegionCount++;<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>        }<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      }<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      totalRegionCount = states.size();<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      .setOpenRegions(openRegionsCount)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      .setClosedRegions(closedRegionCount)<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>      .setSplitRegions(splitRegionCount)<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      .setRegionsInTransition(ritCount)<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      .setTotalRegions(totalRegionCount)<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      .build();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  }<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span><a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>}<a name="line.2290"></a>
+<span class="sourceLineNo">2172</span>    int evcount = 0;<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      final ServerName server = entry.getKey();<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>        regionNode.setRegionLocation(server);<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          assignQueueLock.lock();<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>          try {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>            pendingAssignQueue.add(regionNode);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          } finally {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>            assignQueueLock.unlock();<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>          }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        }else {<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      }<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>    }<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span><a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    final long et = System.currentTimeMillis();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>    if (LOG.isTraceEnabled()) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>  }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>    assignQueueLock.lock();<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>    try {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      }<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    } finally {<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      assignQueueLock.unlock();<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  /**<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   */<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    // RegionServerInfo that includes Version.<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        .stream()<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>        .collect(Collectors.toList());<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>    if (serverList.isEmpty()) {<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      return Collections.emptyList();<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    }<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    String highestVersion = Collections.max(serverList,<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    return serverList.stream()<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        .map(Pair::getFirst)<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>        .collect(Collectors.toList());<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>  }<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span><a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  @VisibleForTesting<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>  MasterServices getMaster() {<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    return master;<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span><a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  /**<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>   * @return a snapshot of rsReports<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>   */<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    synchronized (rsReports) {<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>    }<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>    return rsReportsSnapshot;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span><a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  /**<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>   * Provide regions state count for given table.<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>   *<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>   * @param tableName TableName<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>   * @return region states count<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>   */<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>    int openRegionsCount = 0;<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>    int closedRegionCount = 0;<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>    int ritCount = 0;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    int splitRegionCount = 0;<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    int totalRegionCount = 0;<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>    if (!isTableDisabled(tableName)) {<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      for (RegionState regionState : states) {<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>        if (regionState.isOpened()) {<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>          openRegionsCount++;<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>        } else if (regionState.isClosed()) {<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>          closedRegionCount++;<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>        } else if (regionState.isSplit()) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>          splitRegionCount++;<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      totalRegionCount = states.size();<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    }<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      .setOpenRegions(openRegionsCount)<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      .setClosedRegions(closedRegionCount)<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      .setSplitRegions(splitRegionCount)<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>      .setRegionsInTransition(ritCount)<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>      .setTotalRegions(totalRegionCount)<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      .build();<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>  }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span><a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>}<a name="line.2286"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
index 95efc71..ff5f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionChore.html
@@ -2173,129 +2173,125 @@
 <span class="sourceLineNo">2165</span>    final ProcedureEvent&lt;?&gt;[] events = new ProcedureEvent[regions.size()];<a name="line.2165"></a>
 <span class="sourceLineNo">2166</span>    final long st = System.currentTimeMillis();<a name="line.2166"></a>
 <span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    if (plan == null) {<a name="line.2168"></a>
+<span class="sourceLineNo">2168</span>    if (plan.isEmpty()) {<a name="line.2168"></a>
 <span class="sourceLineNo">2169</span>      throw new HBaseIOException("unable to compute plans for regions=" + regions.size());<a name="line.2169"></a>
 <span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
 <span class="sourceLineNo">2171</span><a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    if (plan.isEmpty()) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>      return;<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    int evcount = 0;<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      final ServerName server = entry.getKey();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        regionNode.setRegionLocation(server);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>          assignQueueLock.lock();<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          try {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>            pendingAssignQueue.add(regionNode);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          } finally {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>            assignQueueLock.unlock();<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          }<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }else {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    }<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span><a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    final long et = System.currentTimeMillis();<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    if (LOG.isTraceEnabled()) {<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>    }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span><a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    assignQueueLock.lock();<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>    try {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    } finally {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      assignQueueLock.unlock();<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>    }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span><a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   */<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    // RegionServerInfo that includes Version.<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        .stream()<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        .collect(Collectors.toList());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>    if (serverList.isEmpty()) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      return Collections.emptyList();<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    String highestVersion = Collections.max(serverList,<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return serverList.stream()<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>        .map(Pair::getFirst)<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        .collect(Collectors.toList());<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  @VisibleForTesting<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  MasterServices getMaster() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return master;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  /**<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   * @return a snapshot of rsReports<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>   */<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    synchronized (rsReports) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    return rsReportsSnapshot;<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span><a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>  /**<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * Provide regions state count for given table.<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   *<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * @param tableName TableName<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * @return region states count<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   */<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>    int openRegionsCount = 0;<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    int closedRegionCount = 0;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>    int ritCount = 0;<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    int splitRegionCount = 0;<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    int totalRegionCount = 0;<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    if (!isTableDisabled(tableName)) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>      for (RegionState regionState : states) {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>        if (regionState.isOpened()) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          openRegionsCount++;<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        } else if (regionState.isClosed()) {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>          closedRegionCount++;<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>        } else if (regionState.isSplit()) {<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>          splitRegionCount++;<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>        }<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      }<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      totalRegionCount = states.size();<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      .setOpenRegions(openRegionsCount)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      .setClosedRegions(closedRegionCount)<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>      .setSplitRegions(splitRegionCount)<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      .setRegionsInTransition(ritCount)<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      .setTotalRegions(totalRegionCount)<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      .build();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  }<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span><a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>}<a name="line.2290"></a>
+<span class="sourceLineNo">2172</span>    int evcount = 0;<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      final ServerName server = entry.getKey();<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>        regionNode.setRegionLocation(server);<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          assignQueueLock.lock();<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>          try {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>            pendingAssignQueue.add(regionNode);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          } finally {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>            assignQueueLock.unlock();<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>          }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        }else {<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      }<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>    }<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span><a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    final long et = System.currentTimeMillis();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>    if (LOG.isTraceEnabled()) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>  }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>    assignQueueLock.lock();<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>    try {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      }<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    } finally {<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      assignQueueLock.unlock();<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  /**<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   */<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    // RegionServerInfo that includes Version.<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        .stream()<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>        .collect(Collectors.toList());<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>    if (serverList.isEmpty()) {<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      return Collections.emptyList();<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    }<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    String highestVersion = Collections.max(serverList,<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    return serverList.stream()<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        .map(Pair::getFirst)<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>        .collect(Collectors.toList());<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>  }<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span><a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  @VisibleForTesting<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>  MasterServices getMaster() {<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    return master;<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span><a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  /**<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>   * @return a snapshot of rsReports<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>   */<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    synchronized (rsReports) {<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>    }<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>    return rsReportsSnapshot;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span><a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  /**<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>   * Provide regions state count for given table.<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>   *<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>   * @param tableName TableName<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>   * @return region states count<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>   */<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>    int openRegionsCount = 0;<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>    int closedRegionCount = 0;<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>    int ritCount = 0;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    int splitRegionCount = 0;<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    int totalRegionCount = 0;<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>    if (!isTableDisabled(tableName)) {<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      for (RegionState regionState : states) {<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>        if (regionState.isOpened()) {<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>          openRegionsCount++;<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>        } else if (regionState.isClosed()) {<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>          closedRegionCount++;<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>        } else if (regionState.isSplit()) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>          splitRegionCount++;<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      totalRegionCount = states.size();<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    }<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      .setOpenRegions(openRegionsCount)<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      .setClosedRegions(closedRegionCount)<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      .setSplitRegions(splitRegionCount)<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>      .setRegionsInTransition(ritCount)<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>      .setTotalRegions(totalRegionCount)<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      .build();<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>  }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span><a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>}<a name="line.2286"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
index 95efc71..ff5f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionInTransitionStat.html
@@ -2173,129 +2173,125 @@
 <span class="sourceLineNo">2165</span>    final ProcedureEvent&lt;?&gt;[] events = new ProcedureEvent[regions.size()];<a name="line.2165"></a>
 <span class="sourceLineNo">2166</span>    final long st = System.currentTimeMillis();<a name="line.2166"></a>
 <span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    if (plan == null) {<a name="line.2168"></a>
+<span class="sourceLineNo">2168</span>    if (plan.isEmpty()) {<a name="line.2168"></a>
 <span class="sourceLineNo">2169</span>      throw new HBaseIOException("unable to compute plans for regions=" + regions.size());<a name="line.2169"></a>
 <span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
 <span class="sourceLineNo">2171</span><a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    if (plan.isEmpty()) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>      return;<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    int evcount = 0;<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      final ServerName server = entry.getKey();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        regionNode.setRegionLocation(server);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>          assignQueueLock.lock();<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          try {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>            pendingAssignQueue.add(regionNode);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          } finally {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>            assignQueueLock.unlock();<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          }<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }else {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    }<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span><a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    final long et = System.currentTimeMillis();<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    if (LOG.isTraceEnabled()) {<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>    }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span><a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    assignQueueLock.lock();<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>    try {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    } finally {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      assignQueueLock.unlock();<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>    }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span><a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   */<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    // RegionServerInfo that includes Version.<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        .stream()<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        .collect(Collectors.toList());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>    if (serverList.isEmpty()) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      return Collections.emptyList();<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    String highestVersion = Collections.max(serverList,<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return serverList.stream()<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>        .map(Pair::getFirst)<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        .collect(Collectors.toList());<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  @VisibleForTesting<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  MasterServices getMaster() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return master;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  /**<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   * @return a snapshot of rsReports<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>   */<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    synchronized (rsReports) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    return rsReportsSnapshot;<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span><a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>  /**<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * Provide regions state count for given table.<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   *<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * @param tableName TableName<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * @return region states count<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   */<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>    int openRegionsCount = 0;<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    int closedRegionCount = 0;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>    int ritCount = 0;<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    int splitRegionCount = 0;<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    int totalRegionCount = 0;<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    if (!isTableDisabled(tableName)) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>      for (RegionState regionState : states) {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>        if (regionState.isOpened()) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          openRegionsCount++;<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        } else if (regionState.isClosed()) {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>          closedRegionCount++;<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>        } else if (regionState.isSplit()) {<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>          splitRegionCount++;<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>        }<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      }<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      totalRegionCount = states.size();<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      .setOpenRegions(openRegionsCount)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      .setClosedRegions(closedRegionCount)<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>      .setSplitRegions(splitRegionCount)<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      .setRegionsInTransition(ritCount)<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      .setTotalRegions(totalRegionCount)<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      .build();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  }<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span><a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>}<a name="line.2290"></a>
+<span class="sourceLineNo">2172</span>    int evcount = 0;<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      final ServerName server = entry.getKey();<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>        regionNode.setRegionLocation(server);<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          assignQueueLock.lock();<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>          try {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>            pendingAssignQueue.add(regionNode);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          } finally {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>            assignQueueLock.unlock();<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>          }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        }else {<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      }<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>    }<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span><a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    final long et = System.currentTimeMillis();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>    if (LOG.isTraceEnabled()) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>  }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>    assignQueueLock.lock();<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>    try {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      }<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    } finally {<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      assignQueueLock.unlock();<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  /**<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   */<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    // RegionServerInfo that includes Version.<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        .stream()<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>        .collect(Collectors.toList());<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>    if (serverList.isEmpty()) {<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      return Collections.emptyList();<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    }<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    String highestVersion = Collections.max(serverList,<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    return serverList.stream()<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        .map(Pair::getFirst)<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>        .collect(Collectors.toList());<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>  }<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span><a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  @VisibleForTesting<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>  MasterServices getMaster() {<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    return master;<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span><a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  /**<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>   * @return a snapshot of rsReports<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>   */<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    synchronized (rsReports) {<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>    }<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>    return rsReportsSnapshot;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span><a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  /**<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>   * Provide regions state count for given table.<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>   *<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>   * @param tableName TableName<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>   * @return region states count<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>   */<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>    int openRegionsCount = 0;<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>    int closedRegionCount = 0;<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>    int ritCount = 0;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    int splitRegionCount = 0;<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    int totalRegionCount = 0;<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>    if (!isTableDisabled(tableName)) {<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      for (RegionState regionState : states) {<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>        if (regionState.isOpened()) {<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>          openRegionsCount++;<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>        } else if (regionState.isClosed()) {<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>          closedRegionCount++;<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>        } else if (regionState.isSplit()) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>          splitRegionCount++;<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      totalRegionCount = states.size();<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    }<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      .setOpenRegions(openRegionsCount)<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      .setClosedRegions(closedRegionCount)<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      .setSplitRegions(splitRegionCount)<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>      .setRegionsInTransition(ritCount)<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>      .setTotalRegions(totalRegionCount)<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      .build();<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>  }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span><a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>}<a name="line.2286"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionMetaLoadingVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionMetaLoadingVisitor.html
index 95efc71..ff5f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionMetaLoadingVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.RegionMetaLoadingVisitor.html
@@ -2173,129 +2173,125 @@
 <span class="sourceLineNo">2165</span>    final ProcedureEvent&lt;?&gt;[] events = new ProcedureEvent[regions.size()];<a name="line.2165"></a>
 <span class="sourceLineNo">2166</span>    final long st = System.currentTimeMillis();<a name="line.2166"></a>
 <span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    if (plan == null) {<a name="line.2168"></a>
+<span class="sourceLineNo">2168</span>    if (plan.isEmpty()) {<a name="line.2168"></a>
 <span class="sourceLineNo">2169</span>      throw new HBaseIOException("unable to compute plans for regions=" + regions.size());<a name="line.2169"></a>
 <span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
 <span class="sourceLineNo">2171</span><a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    if (plan.isEmpty()) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>      return;<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    int evcount = 0;<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      final ServerName server = entry.getKey();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        regionNode.setRegionLocation(server);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>          assignQueueLock.lock();<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          try {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>            pendingAssignQueue.add(regionNode);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          } finally {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>            assignQueueLock.unlock();<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          }<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }else {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    }<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span><a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    final long et = System.currentTimeMillis();<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    if (LOG.isTraceEnabled()) {<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>    }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span><a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    assignQueueLock.lock();<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>    try {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    } finally {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      assignQueueLock.unlock();<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>    }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span><a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   */<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    // RegionServerInfo that includes Version.<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        .stream()<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        .collect(Collectors.toList());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>    if (serverList.isEmpty()) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      return Collections.emptyList();<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    String highestVersion = Collections.max(serverList,<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return serverList.stream()<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>        .map(Pair::getFirst)<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        .collect(Collectors.toList());<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  @VisibleForTesting<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  MasterServices getMaster() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return master;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  /**<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   * @return a snapshot of rsReports<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>   */<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    synchronized (rsReports) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    return rsReportsSnapshot;<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span><a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>  /**<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * Provide regions state count for given table.<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   *<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * @param tableName TableName<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * @return region states count<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   */<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>    int openRegionsCount = 0;<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    int closedRegionCount = 0;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>    int ritCount = 0;<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    int splitRegionCount = 0;<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    int totalRegionCount = 0;<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    if (!isTableDisabled(tableName)) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>      for (RegionState regionState : states) {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>        if (regionState.isOpened()) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          openRegionsCount++;<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        } else if (regionState.isClosed()) {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>          closedRegionCount++;<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>        } else if (regionState.isSplit()) {<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>          splitRegionCount++;<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>        }<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      }<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      totalRegionCount = states.size();<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      .setOpenRegions(openRegionsCount)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      .setClosedRegions(closedRegionCount)<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>      .setSplitRegions(splitRegionCount)<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      .setRegionsInTransition(ritCount)<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      .setTotalRegions(totalRegionCount)<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      .build();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  }<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span><a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>}<a name="line.2290"></a>
+<span class="sourceLineNo">2172</span>    int evcount = 0;<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      final ServerName server = entry.getKey();<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>        regionNode.setRegionLocation(server);<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          assignQueueLock.lock();<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>          try {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>            pendingAssignQueue.add(regionNode);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          } finally {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>            assignQueueLock.unlock();<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>          }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        }else {<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      }<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>    }<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span><a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    final long et = System.currentTimeMillis();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>    if (LOG.isTraceEnabled()) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>  }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>    assignQueueLock.lock();<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>    try {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      }<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    } finally {<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      assignQueueLock.unlock();<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  /**<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   */<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    // RegionServerInfo that includes Version.<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        .stream()<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>        .collect(Collectors.toList());<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>    if (serverList.isEmpty()) {<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      return Collections.emptyList();<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    }<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    String highestVersion = Collections.max(serverList,<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    return serverList.stream()<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        .map(Pair::getFirst)<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>        .collect(Collectors.toList());<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>  }<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span><a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  @VisibleForTesting<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>  MasterServices getMaster() {<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    return master;<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span><a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  /**<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>   * @return a snapshot of rsReports<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>   */<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    synchronized (rsReports) {<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>    }<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>    return rsReportsSnapshot;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span><a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  /**<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>   * Provide regions state count for given table.<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>   *<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>   * @param tableName TableName<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>   * @return region states count<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>   */<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>    int openRegionsCount = 0;<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>    int closedRegionCount = 0;<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>    int ritCount = 0;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    int splitRegionCount = 0;<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    int totalRegionCount = 0;<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>    if (!isTableDisabled(tableName)) {<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      for (RegionState regionState : states) {<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>        if (regionState.isOpened()) {<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>          openRegionsCount++;<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>        } else if (regionState.isClosed()) {<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>          closedRegionCount++;<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>        } else if (regionState.isSplit()) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>          splitRegionCount++;<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      totalRegionCount = states.size();<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    }<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      .setOpenRegions(openRegionsCount)<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      .setClosedRegions(closedRegionCount)<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      .setSplitRegions(splitRegionCount)<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>      .setRegionsInTransition(ritCount)<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>      .setTotalRegions(totalRegionCount)<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      .build();<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>  }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span><a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>}<a name="line.2286"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
index 95efc71..ff5f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/assignment/AssignmentManager.html
@@ -2173,129 +2173,125 @@
 <span class="sourceLineNo">2165</span>    final ProcedureEvent&lt;?&gt;[] events = new ProcedureEvent[regions.size()];<a name="line.2165"></a>
 <span class="sourceLineNo">2166</span>    final long st = System.currentTimeMillis();<a name="line.2166"></a>
 <span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>    if (plan == null) {<a name="line.2168"></a>
+<span class="sourceLineNo">2168</span>    if (plan.isEmpty()) {<a name="line.2168"></a>
 <span class="sourceLineNo">2169</span>      throw new HBaseIOException("unable to compute plans for regions=" + regions.size());<a name="line.2169"></a>
 <span class="sourceLineNo">2170</span>    }<a name="line.2170"></a>
 <span class="sourceLineNo">2171</span><a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    if (plan.isEmpty()) {<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>      return;<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    }<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span><a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>    int evcount = 0;<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      final ServerName server = entry.getKey();<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        regionNode.setRegionLocation(server);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>          assignQueueLock.lock();<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          try {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>            pendingAssignQueue.add(regionNode);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          } finally {<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>            assignQueueLock.unlock();<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>          }<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        }else {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>        }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>      }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    }<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span><a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>    final long et = System.currentTimeMillis();<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    if (LOG.isTraceEnabled()) {<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>    }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span><a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    assignQueueLock.lock();<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>    try {<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    } finally {<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>      assignQueueLock.unlock();<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>    }<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>  }<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span><a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>  /**<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>   */<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    // RegionServerInfo that includes Version.<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>        .stream()<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        .collect(Collectors.toList());<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>    if (serverList.isEmpty()) {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>      return Collections.emptyList();<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>    String highestVersion = Collections.max(serverList,<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return serverList.stream()<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>        .map(Pair::getFirst)<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        .collect(Collectors.toList());<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span><a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>  @VisibleForTesting<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  MasterServices getMaster() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return master;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  /**<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   * @return a snapshot of rsReports<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>   */<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>    synchronized (rsReports) {<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    }<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    return rsReportsSnapshot;<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span><a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>  /**<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * Provide regions state count for given table.<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   *<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   * @param tableName TableName<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>   * @return region states count<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>   */<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>    int openRegionsCount = 0;<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    int closedRegionCount = 0;<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>    int ritCount = 0;<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>    int splitRegionCount = 0;<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>    int totalRegionCount = 0;<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>    if (!isTableDisabled(tableName)) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>      for (RegionState regionState : states) {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>        if (regionState.isOpened()) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          openRegionsCount++;<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        } else if (regionState.isClosed()) {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>          closedRegionCount++;<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>        } else if (regionState.isSplit()) {<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>          splitRegionCount++;<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>        }<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      }<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      totalRegionCount = states.size();<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      .setOpenRegions(openRegionsCount)<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      .setClosedRegions(closedRegionCount)<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>      .setSplitRegions(splitRegionCount)<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      .setRegionsInTransition(ritCount)<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>      .setTotalRegions(totalRegionCount)<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>      .build();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  }<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span><a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>}<a name="line.2290"></a>
+<span class="sourceLineNo">2172</span>    int evcount = 0;<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry: plan.entrySet()) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      final ServerName server = entry.getKey();<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>      for (RegionInfo hri: entry.getValue()) {<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>        final RegionStateNode regionNode = regions.get(hri);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>        regionNode.setRegionLocation(server);<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>        if (server.equals(LoadBalancer.BOGUS_SERVER_NAME) &amp;&amp; regionNode.isSystemTable()) {<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          assignQueueLock.lock();<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>          try {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>            pendingAssignQueue.add(regionNode);<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          } finally {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>            assignQueueLock.unlock();<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>          }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>        }else {<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>          events[evcount++] = regionNode.getProcedureEvent();<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      }<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>    }<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>    ProcedureEvent.wakeEvents(getProcedureScheduler(), events);<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span><a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    final long et = System.currentTimeMillis();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>    if (LOG.isTraceEnabled()) {<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      LOG.trace("ASSIGN ACCEPT " + events.length + " -&gt; " +<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>          StringUtils.humanTimeDiff(et - st));<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>    }<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>  }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>  private void addToPendingAssignment(final HashMap&lt;RegionInfo, RegionStateNode&gt; regions,<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>      final Collection&lt;RegionInfo&gt; pendingRegions) {<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>    assignQueueLock.lock();<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>    try {<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      for (RegionInfo hri: pendingRegions) {<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>        pendingAssignQueue.add(regions.get(hri));<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>      }<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    } finally {<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      assignQueueLock.unlock();<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span><a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  /**<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>   * Get a list of servers that this region cannot be assigned to.<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>   * For system tables, we must assign them to a server with highest version.<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   */<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>  public List&lt;ServerName&gt; getExcludedServersForSystemTable() {<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    // TODO: This should be a cached list kept by the ServerManager rather than calculated on each<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    // move or system region assign. The RegionServerTracker keeps list of online Servers with<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>    // RegionServerInfo that includes Version.<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>    List&lt;Pair&lt;ServerName, String&gt;&gt; serverList = master.getServerManager().getOnlineServersList()<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>        .stream()<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>        .map((s)-&gt;new Pair&lt;&gt;(s, master.getRegionServerVersion(s)))<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>        .collect(Collectors.toList());<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>    if (serverList.isEmpty()) {<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      return Collections.emptyList();<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    }<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    String highestVersion = Collections.max(serverList,<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      (o1, o2) -&gt; VersionInfo.compareVersion(o1.getSecond(), o2.getSecond())).getSecond();<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>    return serverList.stream()<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        .filter((p)-&gt;!p.getSecond().equals(highestVersion))<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>        .map(Pair::getFirst)<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>        .collect(Collectors.toList());<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>  }<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span><a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  @VisibleForTesting<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>  MasterServices getMaster() {<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>    return master;<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span><a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  /**<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>   * @return a snapshot of rsReports<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>   */<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>  public Map&lt;ServerName, Set&lt;byte[]&gt;&gt; getRSReports() {<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    Map&lt;ServerName, Set&lt;byte[]&gt;&gt; rsReportsSnapshot = new HashMap&lt;&gt;();<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    synchronized (rsReports) {<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>      rsReports.entrySet().forEach(e -&gt; rsReportsSnapshot.put(e.getKey(), e.getValue()));<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>    }<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>    return rsReportsSnapshot;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span><a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>  /**<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>   * Provide regions state count for given table.<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>   * e.g howmany regions of give table are opened/closed/rit etc<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>   *<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>   * @param tableName TableName<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>   * @return region states count<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>   */<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>  public RegionStatesCount getRegionStatesCount(TableName tableName) {<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>    int openRegionsCount = 0;<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>    int closedRegionCount = 0;<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>    int ritCount = 0;<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>    int splitRegionCount = 0;<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    int totalRegionCount = 0;<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>    if (!isTableDisabled(tableName)) {<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      final List&lt;RegionState&gt; states = regionStates.getTableRegionStates(tableName);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>      for (RegionState regionState : states) {<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>        if (regionState.isOpened()) {<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>          openRegionsCount++;<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>        } else if (regionState.isClosed()) {<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>          closedRegionCount++;<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>        } else if (regionState.isSplit()) {<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>          splitRegionCount++;<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      totalRegionCount = states.size();<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>      ritCount = totalRegionCount - openRegionsCount - splitRegionCount;<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>    }<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>    return new RegionStatesCount.RegionStatesCountBuilder()<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>      .setOpenRegions(openRegionsCount)<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>      .setClosedRegions(closedRegionCount)<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      .setSplitRegions(splitRegionCount)<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>      .setRegionsInTransition(ritCount)<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>      .setTotalRegions(totalRegionCount)<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>      .build();<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>  }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span><a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>}<a name="line.2286"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
index 01007bc..883c40a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html
@@ -26,1264 +26,1264 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.master.balancer;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.ArrayList;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.Arrays;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.Collection;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Collections;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Comparator;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Deque;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Iterator;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.List;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.Map;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.Map.Entry;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.NavigableMap;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.Random;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.Set;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.TreeMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.function.Predicate;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.stream.Collectors;<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.conf.Configuration;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HConstants;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerName;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.TableName;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.namequeues.NamedQueueRecorder;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.net.Address;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>/**<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * The base class for load balancers. It provides the the functions used to by<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * {@link org.apache.hadoop.hbase.master.assignment.AssignmentManager} to assign regions<a name="line.71"></a>
-<span class="sourceLineNo">072</span> * in the edge cases. It doesn't provide an implementation of the<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * actual balancing algorithm.<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>@InterfaceAudience.Private<a name="line.76"></a>
-<span class="sourceLineNo">077</span>public abstract class BaseLoadBalancer implements LoadBalancer {<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public static final String BALANCER_DECISION_BUFFER_ENABLED =<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    "hbase.master.balancer.decision.buffer.enabled";<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  public static final boolean DEFAULT_BALANCER_DECISION_BUFFER_ENABLED = false;<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  protected static final int MIN_SERVER_BALANCE = 2;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private volatile boolean stopped = false;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private static final List&lt;RegionInfo&gt; EMPTY_REGION_LIST = Collections.emptyList();<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  static final Predicate&lt;ServerMetrics&gt; IDLE_SERVER_PREDICATOR<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    = load -&gt; load.getRegionMetrics().isEmpty();<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  protected RegionLocationFinder regionFinder;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  protected boolean useRegionFinder;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  protected boolean isByTable = false;<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>   * Use to add balancer decision history to ring-buffer<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  protected NamedQueueRecorder namedQueueRecorder;<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private static class DefaultRackManager extends RackManager {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    @Override<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public String getRack(ServerName server) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return UNKNOWN_RACK;<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><a name="line.106"></a>
-<span class="sourceLineNo">107</span>  /**<a name="line.107"></a>
-<span class="sourceLineNo">108</span>   * The constructor that uses the basic MetricsBalancer<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  protected BaseLoadBalancer() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    metricsBalancer = new MetricsBalancer();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    createRegionFinder();<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>  /**<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * This Constructor accepts an instance of MetricsBalancer,<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * which will be used instead of creating a new one<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  protected BaseLoadBalancer(MetricsBalancer metricsBalancer) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    this.metricsBalancer = (metricsBalancer != null) ? metricsBalancer : new MetricsBalancer();<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    createRegionFinder();<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>  private void createRegionFinder() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    useRegionFinder = config.getBoolean("hbase.master.balancer.uselocality", true);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    if (useRegionFinder) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      regionFinder = new RegionLocationFinder();<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><a name="line.130"></a>
-<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   * An efficient array based implementation similar to ClusterState for keeping<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * the status of the cluster in terms of region assignment and distribution.<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * LoadBalancers, such as StochasticLoadBalancer uses this Cluster object because of<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * hundreds of thousands of hashmap manipulations are very costly, which is why this<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * class uses mostly indexes and arrays.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   *<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   * Cluster tracks a list of unassigned regions, region assignments, and the server<a name="line.138"></a>
-<span class="sourceLineNo">139</span>   * topology in terms of server names, hostnames and racks.<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   */<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  protected static class Cluster {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>    ServerName[] servers;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    String[] hosts; // ServerName uniquely identifies a region server. multiple RS can run on the same host<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    String[] racks;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    boolean multiServersPerHost = false; // whether or not any host has more than one server<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>    ArrayList&lt;String&gt; tables;<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    RegionInfo[] regions;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    Deque&lt;BalancerRegionLoad&gt;[] regionLoads;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    private RegionLocationFinder regionFinder;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>    int[][] regionLocations; //regionIndex -&gt; list of serverIndex sorted by locality<a name="line.152"></a>
-<span class="sourceLineNo">153</span><a name="line.153"></a>
-<span class="sourceLineNo">154</span>    int[]   serverIndexToHostIndex;      //serverIndex -&gt; host index<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    int[]   serverIndexToRackIndex;      //serverIndex -&gt; rack index<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    int[][] regionsPerServer;            //serverIndex -&gt; region list<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    int[]   serverIndexToRegionsOffset;  //serverIndex -&gt; offset of region list<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    int[][] regionsPerHost;              //hostIndex -&gt; list of regions<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    int[][] regionsPerRack;              //rackIndex -&gt; region list<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    int[][] primariesOfRegionsPerServer; //serverIndex -&gt; sorted list of regions by primary region index<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    int[][] primariesOfRegionsPerHost;   //hostIndex -&gt; sorted list of regions by primary region index<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    int[][] primariesOfRegionsPerRack;   //rackIndex -&gt; sorted list of regions by primary region index<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>    int[][] serversPerHost;              //hostIndex -&gt; list of server indexes<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    int[][] serversPerRack;              //rackIndex -&gt; list of server indexes<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    int[]   regionIndexToServerIndex;    //regionIndex -&gt; serverIndex<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    int[]   initialRegionIndexToServerIndex;    //regionIndex -&gt; serverIndex (initial cluster state)<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    int[]   regionIndexToTableIndex;     //regionIndex -&gt; tableIndex<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    int[][] numRegionsPerServerPerTable; //serverIndex -&gt; tableIndex -&gt; # regions<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    int[]   numMaxRegionsPerTable;       //tableIndex -&gt; max number of regions in a single RS<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    int[]   regionIndexToPrimaryIndex;   //regionIndex -&gt; regionIndex of the primary<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    boolean hasRegionReplicas = false;   //whether there is regions with replicas<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>    Integer[] serverIndicesSortedByRegionCount;<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    Integer[] serverIndicesSortedByLocality;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>    Map&lt;Address, Integer&gt; serversToIndex;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    Map&lt;String, Integer&gt; hostsToIndex;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    Map&lt;String, Integer&gt; racksToIndex;<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    Map&lt;String, Integer&gt; tablesToIndex;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    Map&lt;RegionInfo, Integer&gt; regionsToIndex;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    float[] localityPerServer;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>    int numServers;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    int numHosts;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    int numRacks;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    int numTables;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    int numRegions;<a name="line.189"></a>
-<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span>    int numMovedRegions = 0; //num moved regions from the initial configuration<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; clusterState;<a name="line.192"></a>
-<span class="sourceLineNo">193</span><a name="line.193"></a>
-<span class="sourceLineNo">194</span>    protected final RackManager rackManager;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    // Maps region -&gt; rackIndex -&gt; locality of region on rack<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    private float[][] rackLocalities;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    // Maps localityType -&gt; region -&gt; [server|rack]Index with highest locality<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    private int[][] regionsToMostLocalEntities;<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>    protected Cluster(<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; clusterState,<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads,<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        RegionLocationFinder regionFinder,<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        RackManager rackManager) {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      this(null, clusterState, loads, regionFinder, rackManager);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>    @SuppressWarnings("unchecked")<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    protected Cluster(<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        Collection&lt;RegionInfo&gt; unassignedRegions,<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; clusterState,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        RegionLocationFinder regionFinder,<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        RackManager rackManager) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>      if (unassignedRegions == null) {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        unassignedRegions = EMPTY_REGION_LIST;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      }<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>      serversToIndex = new HashMap&lt;&gt;();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      hostsToIndex = new HashMap&lt;&gt;();<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      racksToIndex = new HashMap&lt;&gt;();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      tablesToIndex = new HashMap&lt;&gt;();<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>      //TODO: We should get the list of tables from master<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      tables = new ArrayList&lt;&gt;();<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      this.rackManager = rackManager != null ? rackManager : new DefaultRackManager();<a name="line.227"></a>
-<span class="sourceLineNo">228</span><a name="line.228"></a>
-<span class="sourceLineNo">229</span>      numRegions = 0;<a name="line.229"></a>
-<span class="sourceLineNo">230</span><a name="line.230"></a>
-<span class="sourceLineNo">231</span>      List&lt;List&lt;Integer&gt;&gt; serversPerHostList = new ArrayList&lt;&gt;();<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      List&lt;List&lt;Integer&gt;&gt; serversPerRackList = new ArrayList&lt;&gt;();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      this.clusterState = clusterState;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      this.regionFinder = regionFinder;<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // Use servername and port as there can be dead servers in this list. We want everything with<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      // a matching hostname and port to have the same index.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      for (ServerName sn : clusterState.keySet()) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>        if (sn == null) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          LOG.warn("TODO: Enable TRACE on BaseLoadBalancer. Empty servername); " +<a name="line.240"></a>
-<span class="sourceLineNo">241</span>              "skipping; unassigned regions?");<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          if (LOG.isTraceEnabled()) {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>            LOG.trace("EMPTY SERVERNAME " + clusterState.toString());<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          continue;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        }<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        if (serversToIndex.get(sn.getAddress()) == null) {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          serversToIndex.put(sn.getAddress(), numServers++);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        }<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        if (!hostsToIndex.containsKey(sn.getHostname())) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          hostsToIndex.put(sn.getHostname(), numHosts++);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          serversPerHostList.add(new ArrayList&lt;&gt;(1));<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        }<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>        int serverIndex = serversToIndex.get(sn.getAddress());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        int hostIndex = hostsToIndex.get(sn.getHostname());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        serversPerHostList.get(hostIndex).add(serverIndex);<a name="line.257"></a>
-<span class="sourceLineNo">258</span><a name="line.258"></a>
-<span class="sourceLineNo">259</span>        String rack = this.rackManager.getRack(sn);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        if (!racksToIndex.containsKey(rack)) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          racksToIndex.put(rack, numRacks++);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          serversPerRackList.add(new ArrayList&lt;&gt;());<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        int rackIndex = racksToIndex.get(rack);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        serversPerRackList.get(rackIndex).add(serverIndex);<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>
-<span class="sourceLineNo">268</span>      // Count how many regions there are.<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      for (Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : clusterState.entrySet()) {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        numRegions += entry.getValue().size();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      numRegions += unassignedRegions.size();<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>      regionsToIndex = new HashMap&lt;&gt;(numRegions);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      servers = new ServerName[numServers];<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      serversPerHost = new int[numHosts][];<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      serversPerRack = new int[numRacks][];<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      regions = new RegionInfo[numRegions];<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      regionIndexToServerIndex = new int[numRegions];<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      initialRegionIndexToServerIndex = new int[numRegions];<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      regionIndexToTableIndex = new int[numRegions];<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      regionIndexToPrimaryIndex = new int[numRegions];<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      regionLoads = new Deque[numRegions];<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>      regionLocations = new int[numRegions][];<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      serverIndicesSortedByRegionCount = new Integer[numServers];<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      serverIndicesSortedByLocality = new Integer[numServers];<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      localityPerServer = new float[numServers];<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>      serverIndexToHostIndex = new int[numServers];<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      serverIndexToRackIndex = new int[numServers];<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      regionsPerServer = new int[numServers][];<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      serverIndexToRegionsOffset = new int[numServers];<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      regionsPerHost = new int[numHosts][];<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      regionsPerRack = new int[numRacks][];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      primariesOfRegionsPerServer = new int[numServers][];<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      primariesOfRegionsPerHost = new int[numHosts][];<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      primariesOfRegionsPerRack = new int[numRacks][];<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>      int tableIndex = 0, regionIndex = 0, regionPerServerIndex = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span><a name="line.301"></a>
-<span class="sourceLineNo">302</span>      for (Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : clusterState.entrySet()) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        if (entry.getKey() == null) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          LOG.warn("SERVERNAME IS NULL, skipping " + entry.getValue());<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          continue;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>        int serverIndex = serversToIndex.get(entry.getKey().getAddress());<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>        // keep the servername if this is the first server name for this hostname<a name="line.309"></a>
-<span class="sourceLineNo">310</span>        // or this servername has the newest startcode.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        if (servers[serverIndex] == null ||<a name="line.311"></a>
-<span class="sourceLineNo">312</span>            servers[serverIndex].getStartcode() &lt; entry.getKey().getStartcode()) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>          servers[serverIndex] = entry.getKey();<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>        if (regionsPerServer[serverIndex] != null) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          // there is another server with the same hostAndPort in ClusterState.<a name="line.317"></a>
-<span class="sourceLineNo">318</span>          // allocate the array for the total size<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          regionsPerServer[serverIndex] = new int[entry.getValue().size() + regionsPerServer[serverIndex].length];<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        } else {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          regionsPerServer[serverIndex] = new int[entry.getValue().size()];<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        }<a name="line.322"></a>
-<span class="sourceLineNo">323</span>        primariesOfRegionsPerServer[serverIndex] = new int[regionsPerServer[serverIndex].length];<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        serverIndicesSortedByRegionCount[serverIndex] = serverIndex;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        serverIndicesSortedByLocality[serverIndex] = serverIndex;<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>      hosts = new String[numHosts];<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      for (Entry&lt;String, Integer&gt; entry : hostsToIndex.entrySet()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        hosts[entry.getValue()] = entry.getKey();<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      racks = new String[numRacks];<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      for (Entry&lt;String, Integer&gt; entry : racksToIndex.entrySet()) {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        racks[entry.getValue()] = entry.getKey();<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>      for (Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : clusterState.entrySet()) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        int serverIndex = serversToIndex.get(entry.getKey().getAddress());<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        regionPerServerIndex = serverIndexToRegionsOffset[serverIndex];<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>        int hostIndex = hostsToIndex.get(entry.getKey().getHostname());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        serverIndexToHostIndex[serverIndex] = hostIndex;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>        int rackIndex = racksToIndex.get(this.rackManager.getRack(entry.getKey()));<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        serverIndexToRackIndex[serverIndex] = rackIndex;<a name="line.345"></a>
-<span class="sourceLineNo">346</span><a name="line.346"></a>
-<span class="sourceLineNo">347</span>        for (RegionInfo region : entry.getValue()) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          registerRegion(region, regionIndex, serverIndex, loads, regionFinder);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          regionsPerServer[serverIndex][regionPerServerIndex++] = regionIndex;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          regionIndex++;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        }<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        serverIndexToRegionsOffset[serverIndex] = regionPerServerIndex;<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      }<a name="line.353"></a>
-<span class="sourceLineNo">354</span><a name="line.354"></a>
-<span class="sourceLineNo">355</span>      for (RegionInfo region : unassignedRegions) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        registerRegion(region, regionIndex, -1, loads, regionFinder);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        regionIndex++;<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span><a name="line.359"></a>
-<span class="sourceLineNo">360</span>      for (int i = 0; i &lt; serversPerHostList.size(); i++) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        serversPerHost[i] = new int[serversPerHostList.get(i).size()];<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        for (int j = 0; j &lt; serversPerHost[i].length; j++) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          serversPerHost[i][j] = serversPerHostList.get(i).get(j);<a name="line.363"></a>
-<span class="sourceLineNo">364</span>        }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>        if (serversPerHost[i].length &gt; 1) {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          multiServersPerHost = true;<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>      for (int i = 0; i &lt; serversPerRackList.size(); i++) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>        serversPerRack[i] = new int[serversPerRackList.get(i).size()];<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        for (int j = 0; j &lt; serversPerRack[i].length; j++) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          serversPerRack[i][j] = serversPerRackList.get(i).get(j);<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><a name="line.376"></a>
-<span class="sourceLineNo">377</span>      numTables = tables.size();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      numRegionsPerServerPerTable = new int[numServers][numTables];<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>      for (int i = 0; i &lt; numServers; i++) {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        for (int j = 0; j &lt; numTables; j++) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>          numRegionsPerServerPerTable[i][j] = 0;<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        }<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>      for (int i=0; i &lt; regionIndexToServerIndex.length; i++) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        if (regionIndexToServerIndex[i] &gt;= 0) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>          numRegionsPerServerPerTable[regionIndexToServerIndex[i]][regionIndexToTableIndex[i]]++;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        }<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>      numMaxRegionsPerTable = new int[numTables];<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      for (int[] aNumRegionsPerServerPerTable : numRegionsPerServerPerTable) {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        for (tableIndex = 0; tableIndex &lt; aNumRegionsPerServerPerTable.length; tableIndex++) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>          if (aNumRegionsPerServerPerTable[tableIndex] &gt; numMaxRegionsPerTable[tableIndex]) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            numMaxRegionsPerTable[tableIndex] = aNumRegionsPerServerPerTable[tableIndex];<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          }<a name="line.397"></a>
-<span class="sourceLineNo">398</span>        }<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span>      for (int i = 0; i &lt; regions.length; i ++) {<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        RegionInfo info = regions[i];<a name="line.402"></a>
-<span class="sourceLineNo">403</span>        if (RegionReplicaUtil.isDefaultReplica(info)) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>          regionIndexToPrimaryIndex[i] = i;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        } else {<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          hasRegionReplicas = true;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          RegionInfo primaryInfo = RegionReplicaUtil.getRegionInfoForDefaultReplica(info);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          regionIndexToPrimaryIndex[i] = regionsToIndex.getOrDefault(primaryInfo, -1);<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        }<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>      for (int i = 0; i &lt; regionsPerServer.length; i++) {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        primariesOfRegionsPerServer[i] = new int[regionsPerServer[i].length];<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        for (int j = 0; j &lt; regionsPerServer[i].length; j++) {<a name="line.414"></a>
-<span class="sourceLineNo">415</span>          int primaryIndex = regionIndexToPrimaryIndex[regionsPerServer[i][j]];<a name="line.415"></a>
-<span class="sourceLineNo">416</span>          primariesOfRegionsPerServer[i][j] = primaryIndex;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        }<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        // sort the regions by primaries.<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        Arrays.sort(primariesOfRegionsPerServer[i]);<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>      // compute regionsPerHost<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      if (multiServersPerHost) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>        for (int i = 0 ; i &lt; serversPerHost.length; i++) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          int numRegionsPerHost = 0;<a name="line.425"></a>
-<span class="sourceLineNo">426</span>          for (int j = 0; j &lt; serversPerHost[i].length; j++) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            numRegionsPerHost += regionsPerServer[serversPerHost[i][j]].length;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          regionsPerHost[i] = new int[numRegionsPerHost];<a name="line.429"></a>
-<span class="sourceLineNo">430</span>          primariesOfRegionsPerHost[i] = new int[numRegionsPerHost];<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>        for (int i = 0 ; i &lt; serversPerHost.length; i++) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          int numRegionPerHostIndex = 0;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          for (int j = 0; j &lt; serversPerHost[i].length; j++) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>            for (int k = 0; k &lt; regionsPerServer[serversPerHost[i][j]].length; k++) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>              int region = regionsPerServer[serversPerHost[i][j]][k];<a name="line.436"></a>
-<span class="sourceLineNo">437</span>              regionsPerHost[i][numRegionPerHostIndex] = region;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>              int primaryIndex = regionIndexToPrimaryIndex[region];<a name="line.438"></a>
-<span class="sourceLineNo">439</span>              primariesOfRegionsPerHost[i][numRegionPerHostIndex] = primaryIndex;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              numRegionPerHostIndex++;<a name="line.440"></a>
-<span class="sourceLineNo">441</span>            }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          }<a name="line.442"></a>
-<span class="sourceLineNo">443</span>          // sort the regions by primaries.<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          Arrays.sort(primariesOfRegionsPerHost[i]);<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>      // compute regionsPerRack<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (numRacks &gt; 1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        for (int i = 0 ; i &lt; serversPerRack.length; i++) {<a name="line.450"></a>
-<span class="sourceLineNo">451</span>          int numRegionsPerRack = 0;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>          for (int j = 0; j &lt; serversPerRack[i].length; j++) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>            numRegionsPerRack += regionsPerServer[serversPerRack[i][j]].length;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          }<a name="line.454"></a>
-<span class="sourceLineNo">455</span>          regionsPerRack[i] = new int[numRegionsPerRack];<a name="line.455"></a>
-<span class="sourceLineNo">456</span>          primariesOfRegionsPerRack[i] = new int[numRegionsPerRack];<a name="line.456"></a>
-<span class="sourceLineNo">457</span>        }<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span>        for (int i = 0 ; i &lt; serversPerRack.length; i++) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>          int numRegionPerRackIndex = 0;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>          for (int j = 0; j &lt; serversPerRack[i].length; j++) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>            for (int k = 0; k &lt; regionsPerServer[serversPerRack[i][j]].length; k++) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>              int region = regionsPerServer[serversPerRack[i][j]][k];<a name="line.463"></a>
-<span class="sourceLineNo">464</span>              regionsPerRack[i][numRegionPerRackIndex] = region;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>              int primaryIndex = regionIndexToPrimaryIndex[region];<a name="line.465"></a>
-<span class="sourceLineNo">466</span>              primariesOfRegionsPerRack[i][numRegionPerRackIndex] = primaryIndex;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>              numRegionPerRackIndex++;<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>          // sort the regions by primaries.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          Arrays.sort(primariesOfRegionsPerRack[i]);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    /** Helper for Cluster constructor to handle a region */<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    private void registerRegion(RegionInfo region, int regionIndex,<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        int serverIndex, Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads,<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        RegionLocationFinder regionFinder) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      String tableName = region.getTable().getNameAsString();<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      if (!tablesToIndex.containsKey(tableName)) {<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        tables.add(tableName);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        tablesToIndex.put(tableName, tablesToIndex.size());<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      }<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      int tableIndex = tablesToIndex.get(tableName);<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>      regionsToIndex.put(region, regionIndex);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      regions[regionIndex] = region;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      regionIndexToServerIndex[regionIndex] = serverIndex;<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      initialRegionIndexToServerIndex[regionIndex] = serverIndex;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      regionIndexToTableIndex[regionIndex] = tableIndex;<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>      // region load<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (loads != null) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        Deque&lt;BalancerRegionLoad&gt; rl = loads.get(region.getRegionNameAsString());<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        // That could have failed if the RegionLoad is using the other regionName<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        if (rl == null) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          // Try getting the region load using encoded name.<a name="line.498"></a>
-<span class="sourceLineNo">499</span>          rl = loads.get(region.getEncodedName());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>        }<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        regionLoads[regionIndex] = rl;<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
-<span class="sourceLineNo">503</span><a name="line.503"></a>
-<span class="sourceLineNo">504</span>      if (regionFinder != null) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span>        // region location<a name="line.505"></a>
-<span class="sourceLineNo">506</span>        List&lt;ServerName&gt; loc = regionFinder.getTopBlockLocations(region);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>        regionLocations[regionIndex] = new int[loc.size()];<a name="line.507"></a>
-<span class="sourceLineNo">508</span>        for (int i = 0; i &lt; loc.size(); i++) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          regionLocations[regionIndex][i] = loc.get(i) == null ? -1<a name="line.509"></a>
-<span class="sourceLineNo">510</span>              : (serversToIndex.get(loc.get(i).getAddress()) == null ? -1<a name="line.510"></a>
-<span class="sourceLineNo">511</span>                  : serversToIndex.get(loc.get(i).getAddress()));<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        }<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span>    }<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>    /**<a name="line.516"></a>
-<span class="sourceLineNo">517</span>     * Returns true iff a given server has less regions than the balanced amount<a name="line.517"></a>
-<span class="sourceLineNo">518</span>     */<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    public boolean serverHasTooFewRegions(int server) {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>      int minLoad = this.numRegions / numServers;<a name="line.520"></a>
-<span class="sourceLineNo">521</span>      int numRegions = getNumRegions(server);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      return numRegions &lt; minLoad;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    }<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>     * Retrieves and lazily initializes a field storing the locality of<a name="line.526"></a>
-<span class="sourceLineNo">527</span>     * every region/server combination<a name="line.527"></a>
-<span class="sourceLineNo">528</span>     */<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    public float[][] getOrComputeRackLocalities() {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      if (rackLocalities == null || regionsToMostLocalEntities == null) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        computeCachedLocalities();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      }<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      return rackLocalities;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
-<span class="sourceLineNo">535</span><a name="line.535"></a>
-<span class="sourceLineNo">536</span>    /**<a name="line.536"></a>
-<span class="sourceLineNo">537</span>     * Lazily initializes and retrieves a mapping of region -&gt; server for which region has<a name="line.537"></a>
-<span class="sourceLineNo">538</span>     * the highest the locality<a name="line.538"></a>
-<span class="sourceLineNo">539</span>     */<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    public int[] getOrComputeRegionsToMostLocalEntities(LocalityType type) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>      if (rackLocalities == null || regionsToMostLocalEntities == null) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        computeCachedLocalities();<a name="line.542"></a>
-<span class="sourceLineNo">543</span>      }<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      return regionsToMostLocalEntities[type.ordinal()];<a name="line.544"></a>
-<span class="sourceLineNo">545</span>    }<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>     * Looks up locality from cache of localities. Will create cache if it does<a name="line.548"></a>
-<span class="sourceLineNo">549</span>     * not already exist.<a name="line.549"></a>
-<span class="sourceLineNo">550</span>     */<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    public float getOrComputeLocality(int region, int entity, LocalityType type) {<a name="line.551"></a>
-<span class="sourceLineNo">552</span>      switch (type) {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>        case SERVER:<a name="line.553"></a>
-<span class="sourceLineNo">554</span>          return getLocalityOfRegion(region, entity);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>        case RACK:<a name="line.555"></a>
-<span class="sourceLineNo">556</span>          return getOrComputeRackLocalities()[region][entity];<a name="line.556"></a>
-<span class="sourceLineNo">557</span>        default:<a name="line.557"></a>
-<span class="sourceLineNo">558</span>          throw new IllegalArgumentException("Unsupported LocalityType: " + type);<a name="line.558"></a>
-<span class="sourceLineNo">559</span>      }<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
-<span class="sourceLineNo">561</span><a name="line.561"></a>
-<span class="sourceLineNo">562</span>    /**<a name="line.562"></a>
-<span class="sourceLineNo">563</span>     * Returns locality weighted by region size in MB. Will create locality cache<a name="line.563"></a>
-<span class="sourceLineNo">564</span>     * if it does not already exist.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>     */<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    public double getOrComputeWeightedLocality(int region, int server, LocalityType type) {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      return getRegionSizeMB(region) * getOrComputeLocality(region, server, type);<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>    /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>     * Returns the size in MB from the most recent RegionLoad for region<a name="line.571"></a>
-<span class="sourceLineNo">572</span>     */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    public int getRegionSizeMB(int region) {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      Deque&lt;BalancerRegionLoad&gt; load = regionLoads[region];<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      // This means regions have no actual data on disk<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      if (load == null) {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        return 0;<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      }<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      return regionLoads[region].getLast().getStorefileSizeMB();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
-<span class="sourceLineNo">581</span><a name="line.581"></a>
-<span class="sourceLineNo">582</span>    /**<a name="line.582"></a>
-<span class="sourceLineNo">583</span>     * Computes and caches the locality for each region/rack combinations,<a name="line.583"></a>
-<span class="sourceLineNo">584</span>     * as well as storing a mapping of region -&gt; server and region -&gt; rack such that server<a name="line.584"></a>
-<span class="sourceLineNo">585</span>     * and rack have the highest locality for region<a name="line.585"></a>
-<span class="sourceLineNo">586</span>     */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    private void computeCachedLocalities() {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>      rackLocalities = new float[numRegions][numRacks];<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      regionsToMostLocalEntities = new int[LocalityType.values().length][numRegions];<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>      // Compute localities and find most local server per region<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      for (int region = 0; region &lt; numRegions; region++) {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        int serverWithBestLocality = 0;<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        float bestLocalityForRegion = 0;<a name="line.594"></a>
-<span class="sourceLineNo">595</span>        for (int server = 0; server &lt; numServers; server++) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>          // Aggregate per-rack locality<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          float locality = getLocalityOfRegion(region, server);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>          int rack = serverIndexToRackIndex[server];<a name="line.598"></a>
-<span class="sourceLineNo">599</span>          int numServersInRack = serversPerRack[rack].length;<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          rackLocalities[region][rack] += locality / numServersInRack;<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span>          if (locality &gt; bestLocalityForRegion) {<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            serverWithBestLocality = server;<a name="line.603"></a>
-<span class="sourceLineNo">604</span>            bestLocalityForRegion = locality;<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        }<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        regionsToMostLocalEntities[LocalityType.SERVER.ordinal()][region] = serverWithBestLocality;<a name="line.607"></a>
-<span class="sourceLineNo">608</span><a name="line.608"></a>
-<span class="sourceLineNo">609</span>        // Find most local rack per region<a name="line.609"></a>
-<span class="sourceLineNo">610</span>        int rackWithBestLocality = 0;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        float bestRackLocalityForRegion = 0.0f;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        for (int rack = 0; rack &lt; numRacks; rack++) {<a name="line.612"></a>
-<span class="sourceLineNo">613</span>          float rackLocality = rackLocalities[region][rack];<a name="line.613"></a>
-<span class="sourceLineNo">614</span>          if (rackLocality &gt; bestRackLocalityForRegion) {<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            bestRackLocalityForRegion = rackLocality;<a name="line.615"></a>
-<span class="sourceLineNo">616</span>            rackWithBestLocality = rack;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>          }<a name="line.617"></a>
-<span class="sourceLineNo">618</span>        }<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        regionsToMostLocalEntities[LocalityType.RACK.ordinal()][region] = rackWithBestLocality;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      }<a name="line.620"></a>
-<span class="sourceLineNo">621</span><a name="line.621"></a>
-<span class="sourceLineNo">622</span>    }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>    /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span>     * Maps region index to rack index<a name="line.625"></a>
-<span class="sourceLineNo">626</span>     */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    public int getRackForRegion(int region) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>      return serverIndexToRackIndex[regionIndexToServerIndex[region]];<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    }<a name="line.629"></a>
-<span class="sourceLineNo">630</span><a name="line.630"></a>
-<span class="sourceLineNo">631</span>    enum LocalityType {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      SERVER,<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      RACK<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    }<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>    /** An action to move or swap a region */<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    public static class Action {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      public enum Type {<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        ASSIGN_REGION,<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        MOVE_REGION,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        SWAP_REGIONS,<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        NULL,<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      }<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>      public Type type;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>      public Action (Type type) {this.type = type;}<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      /** Returns an Action which would undo this action */<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      public Action undoAction() { return this; }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      @Override<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      public String toString() { return type + ":";}<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>    public static class AssignRegionAction extends Action {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      public int region;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      public int server;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      public AssignRegionAction(int region, int server) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>        super(Type.ASSIGN_REGION);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>        this.region = region;<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        this.server = server;<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      }<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      @Override<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      public Action undoAction() {<a name="line.662"></a>
-<span class="sourceLineNo">663</span>        // TODO implement this. This action is not being used by the StochasticLB for now<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        // in case it uses it, we should implement this function.<a name="line.664"></a>
-<span class="sourceLineNo">665</span>        throw new NotImplementedException(HConstants.NOT_IMPLEMENTED);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      }<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      @Override<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      public String toString() {<a name="line.668"></a>
-<span class="sourceLineNo">669</span>        return type + ": " + region + ":" + server;<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      }<a name="line.670"></a>
-<span class="sourceLineNo">671</span>    }<a name="line.671"></a>
-<span class="sourceLineNo">672</span><a name="line.672"></a>
-<span class="sourceLineNo">673</span>    public static class MoveRegionAction extends Action {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>      public int region;<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      public int fromServer;<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      public int toServer;<a name="line.676"></a>
-<span class="sourceLineNo">677</span><a name="line.677"></a>
-<span class="sourceLineNo">678</span>      public MoveRegionAction(int region, int fromServer, int toServer) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        super(Type.MOVE_REGION);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        this.fromServer = fromServer;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>        this.region = region;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>        this.toServer = toServer;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      }<a name="line.683"></a>
-<span class="sourceLineNo">684</span>      @Override<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      public Action undoAction() {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        return new MoveRegionAction (region, toServer, fromServer);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      @Override<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      public String toString() {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>        return type + ": " + region + ":" + fromServer + " -&gt; " + toServer;<a name="line.690"></a>
-<span class="sourceLineNo">691</span>      }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>    }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>    public static class SwapRegionsAction extends Action {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      public int fromServer;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>      public int fromRegion;<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      public int toServer;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      public int toRegion;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      public SwapRegionsAction(int fromServer, int fromRegion, int toServer, int toRegion) {<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        super(Type.SWAP_REGIONS);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        this.fromServer = fromServer;<a name="line.701"></a>
-<span class="sourceLineNo">702</span>        this.fromRegion = fromRegion;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>        this.toServer = toServer;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>        this.toRegion = toRegion;<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      }<a name="line.705"></a>
-<span class="sourceLineNo">706</span>      @Override<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      public Action undoAction() {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>        return new SwapRegionsAction (fromServer, toRegion, toServer, fromRegion);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>      }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>      @Override<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      public String toString() {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        return type + ": " + fromRegion + ":" + fromServer + " &lt;-&gt; " + toRegion + ":" + toServer;<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    }<a name="line.714"></a>
-<span class="sourceLineNo">715</span><a name="line.715"></a>
-<span class="sourceLineNo">716</span>    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NM_FIELD_NAMING_CONVENTION",<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        justification="Mistake. Too disruptive to change now")<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    public static final Action NullAction = new Action(Type.NULL);<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>    public void doAction(Action action) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>      switch (action.type) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>      case NULL: break;<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      case ASSIGN_REGION:<a name="line.723"></a>
-<span class="sourceLineNo">724</span>        // FindBugs: Having the assert quietens FB BC_UNCONFIRMED_CAST warnings<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        assert action instanceof AssignRegionAction: action.getClass();<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        AssignRegionAction ar = (AssignRegionAction) action;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>        regionsPerServer[ar.server] = addRegion(regionsPerServer[ar.server], ar.region);<a name="line.727"></a>
-<span class="sourceLineNo">728</span>        regionMoved(ar.region, -1, ar.server);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>        break;<a name="line.729"></a>
-<span class="sourceLineNo">730</span>      case MOVE_REGION:<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        assert action instanceof MoveRegionAction: action.getClass();<a name="line.731"></a>
-<span class="sourceLineNo">732</span>        MoveRegionAction mra = (MoveRegionAction) action;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        regionsPerServer[mra.fromServer] = removeRegion(regionsPerServer[mra.fromServer], mra.region);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        regionsPerServer[mra.toServer] = addRegion(regionsPerServer[mra.toServer], mra.region);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>        regionMoved(mra.region, mra.fromServer, mra.toServer);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        break;<a name="line.736"></a>
-<span class="sourceLineNo">737</span>      case SWAP_REGIONS:<a name="line.737"></a>
-<span class="sourceLineNo">738</span>        assert action instanceof SwapRegionsAction: action.getClass();<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        SwapRegionsAction a = (SwapRegionsAction) action;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        regionsPerServer[a.fromServer] = replaceRegion(regionsPerServer[a.fromServer], a.fromRegion, a.toRegion);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>        regionsPerServer[a.toServer] = replaceRegion(regionsPerServer[a.toServer], a.toRegion, a.fromRegion);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>        regionMoved(a.fromRegion, a.fromServer, a.toServer);<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        regionMoved(a.toRegion, a.toServer, a.fromServer);<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        break;<a name="line.744"></a>
-<span class="sourceLineNo">745</span>      default:<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        throw new RuntimeException("Uknown action:" + action.type);<a name="line.746"></a>
-<span class="sourceLineNo">747</span>      }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    }<a name="line.748"></a>
-<span class="sourceLineNo">749</span><a name="line.749"></a>
-<span class="sourceLineNo">750</span>    /**<a name="line.750"></a>
-<span class="sourceLineNo">751</span>     * Return true if the placement of region on server would lower the availability<a name="line.751"></a>
-<span class="sourceLineNo">752</span>     * of the region in question<a name="line.752"></a>
-<span class="sourceLineNo">753</span>     * @return true or false<a name="line.753"></a>
-<span class="sourceLineNo">754</span>     */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    boolean wouldLowerAvailability(RegionInfo regionInfo, ServerName serverName) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>      if (!serversToIndex.containsKey(serverName.getAddress())) {<a name="line.756"></a>
-<span class="sourceLineNo">757</span>        return false; // safeguard against race between cluster.servers and servers from LB method args<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      }<a name="line.758"></a>
-<span class="sourceLineNo">759</span>      int server = serversToIndex.get(serverName.getAddress());<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      int region = regionsToIndex.get(regionInfo);<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>      // Region replicas for same region should better assign to different servers<a name="line.762"></a>
-<span class="sourceLineNo">763</span>      for (int i : regionsPerServer[server]) {<a name="line.763"></a>
-<span class="sourceLineNo">764</span>        RegionInfo otherRegionInfo = regions[i];<a name="line.764"></a>
-<span class="sourceLineNo">765</span>        if (RegionReplicaUtil.isReplicasForSameRegion(regionInfo, otherRegionInfo)) {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>          return true;<a name="line.766"></a>
-<span class="sourceLineNo">767</span>        }<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      }<a name="line.768"></a>
-<span class="sourceLineNo">769</span><a name="line.769"></a>
-<span class="sourceLineNo">770</span>      int primary = regionIndexToPrimaryIndex[region];<a name="line.770"></a>
-<span class="sourceLineNo">771</span>      if (primary == -1) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>        return false;<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>      // there is a subset relation for server &lt; host &lt; rack<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      // check server first<a name="line.775"></a>
-<span class="sourceLineNo">776</span>      if (contains(primariesOfRegionsPerServer[server], primary)) {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>        // check for whether there are other servers that we can place this region<a name="line.777"></a>
-<span class="sourceLineNo">778</span>        for (int i = 0; i &lt; primariesOfRegionsPerServer.length; i++) {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>          if (i != server &amp;&amp; !contains(primariesOfRegionsPerServer[i], primary)) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>            return true; // meaning there is a better server<a name="line.780"></a>
-<span class="sourceLineNo">781</span>          }<a name="line.781"></a>
-<span class="sourceLineNo">782</span>        }<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        return false; // there is not a better server to place this<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      }<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>      // check host<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      if (multiServersPerHost) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        // these arrays would only be allocated if we have more than one server per host<a name="line.788"></a>
-<span class="sourceLineNo">789</span>        int host = serverIndexToHostIndex[server];<a name="line.789"></a>
-<span class="sourceLineNo">790</span>        if (contains(primariesOfRegionsPerHost[host], primary)) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>          // check for whether there are other hosts that we can place this region<a name="line.791"></a>
-<span class="sourceLineNo">792</span>          for (int i = 0; i &lt; primariesOfRegionsPerHost.length; i++) {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            if (i != host &amp;&amp; !contains(primariesOfRegionsPerHost[i], primary)) {<a name="line.793"></a>
-<span class="sourceLineNo">794</span>              return true; // meaning there is a better host<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            }<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>          return false; // there is not a better host to place this<a name="line.797"></a>
-<span class="sourceLineNo">798</span>        }<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      }<a name="line.799"></a>
-<span class="sourceLineNo">800</span><a name="line.800"></a>
-<span class="sourceLineNo">801</span>      // check rack<a name="line.801"></a>
-<span class="sourceLineNo">802</span>      if (numRacks &gt; 1) {<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        int rack = serverIndexToRackIndex[server];<a name="line.803"></a>
-<span class="sourceLineNo">804</span>        if (contains(primariesOfRegionsPerRack[rack], primary)) {<a name="line.804"></a>
-<span class="sourceLineNo">805</span>          // check for whether there are other racks that we can place this region<a name="line.805"></a>
-<span class="sourceLineNo">806</span>          for (int i = 0; i &lt; primariesOfRegionsPerRack.length; i++) {<a name="line.806"></a>
-<span class="sourceLineNo">807</span>            if (i != rack &amp;&amp; !contains(primariesOfRegionsPerRack[i], primary)) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>              return true; // meaning there is a better rack<a name="line.808"></a>
-<span class="sourceLineNo">809</span>            }<a name="line.809"></a>
-<span class="sourceLineNo">810</span>          }<a name="line.810"></a>
-<span class="sourceLineNo">811</span>          return false; // there is not a better rack to place this<a name="line.811"></a>
-<span class="sourceLineNo">812</span>        }<a name="line.812"></a>
-<span class="sourceLineNo">813</span>      }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>      return false;<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    }<a name="line.816"></a>
-<span class="sourceLineNo">817</span><a name="line.817"></a>
-<span class="sourceLineNo">818</span>    void doAssignRegion(RegionInfo regionInfo, ServerName serverName) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      if (!serversToIndex.containsKey(serverName.getAddress())) {<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        return;<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>      int server = serversToIndex.get(serverName.getAddress());<a name="line.822"></a>
-<span class="sourceLineNo">823</span>      int region = regionsToIndex.get(regionInfo);<a name="line.823"></a>
-<span class="sourceLineNo">824</span>      doAction(new AssignRegionAction(region, server));<a name="line.824"></a>
-<span class="sourceLineNo">825</span>    }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>    void regionMoved(int region, int oldServer, int newServer) {<a name="line.827"></a>
-<span class="sourceLineNo">828</span>      regionIndexToServerIndex[region] = newServer;<a name="line.828"></a>
-<span class="sourceLineNo">829</span>      if (initialRegionIndexToServerIndex[region] == newServer) {<a name="line.829"></a>
-<span class="sourceLineNo">830</span>        numMovedRegions--; //region moved back to original location<a name="line.830"></a>
-<span class="sourceLineNo">831</span>      } else if (oldServer &gt;= 0 &amp;&amp; initialRegionIndexToServerIndex[region] == oldServer) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>        numMovedRegions++; //region moved from original location<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      }<a name="line.833"></a>
-<span class="sourceLineNo">834</span>      int tableIndex = regionIndexToTableIndex[region];<a name="line.834"></a>
-<span class="sourceLineNo">835</span>      if (oldServer &gt;= 0) {<a name="line.835"></a>
-<span class="sourceLineNo">836</span>        numRegionsPerServerPerTable[oldServer][tableIndex]--;<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      }<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      numRegionsPerServerPerTable[newServer][tableIndex]++;<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>      //check whether this caused maxRegionsPerTable in the new Server to be updated<a name="line.840"></a>
-<span class="sourceLineNo">841</span>      if (numRegionsPerServerPerTable[newServer][tableIndex] &gt; numMaxRegionsPerTable[tableIndex]) {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        numMaxRegionsPerTable[tableIndex] = numRegionsPerServerPerTable[newServer][tableIndex];<a name="line.842"></a>
-<span class="sourceLineNo">843</span>      } else if (oldServer &gt;= 0 &amp;&amp; (numRegionsPerServerPerTable[oldServer][tableIndex] + 1)<a name="line.843"></a>
-<span class="sourceLineNo">844</span>          == numMaxRegionsPerTable[tableIndex]) {<a name="line.844"></a>
-<span class="sourceLineNo">845</span>        //recompute maxRegionsPerTable since the previous value was coming from the old server<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        numMaxRegionsPerTable[tableIndex] = 0;<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        for (int[] aNumRegionsPerServerPerTable : numRegionsPerServerPerTable) {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>          if (aNumRegionsPerServerPerTable[tableIndex] &gt; numMaxRegionsPerTable[tableIndex]) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>            numMaxRegionsPerTable[tableIndex] = aNumRegionsPerServerPerTable[tableIndex];<a name="line.849"></a>
-<span class="sourceLineNo">850</span>          }<a name="line.850"></a>
-<span class="sourceLineNo">851</span>        }<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>      // update for servers<a name="line.854"></a>
-<span class="sourceLineNo">855</span>      int primary = regionIndexToPrimaryIndex[region];<a name="line.855"></a>
-<span class="sourceLineNo">856</span>      if (oldServer &gt;= 0) {<a name="line.856"></a>
-<span class="sourceLineNo">857</span>        primariesOfRegionsPerServer[oldServer] = removeRegion(<a name="line.857"></a>
-<span class="sourceLineNo">858</span>          primariesOfRegionsPerServer[oldServer], primary);<a name="line.858"></a>
-<span class="sourceLineNo">859</span>      }<a name="line.859"></a>
-<span class="sourceLineNo">860</span>      primariesOfRegionsPerServer[newServer] = addRegionSorted(<a name="line.860"></a>
-<span class="sourceLineNo">861</span>        primariesOfRegionsPerServer[newServer], primary);<a name="line.861"></a>
-<span class="sourceLineNo">862</span><a name="line.862"></a>
-<span class="sourceLineNo">863</span>      // update for hosts<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      if (multiServersPerHost) {<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        int oldHost = oldServer &gt;= 0 ? serverIndexToHostIndex[oldServer] : -1;<a name="line.865"></a>
-<span class="sourceLineNo">866</span>        int newHost = serverIndexToHostIndex[newServer];<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        if (newHost != oldHost) {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>          regionsPerHost[newHost] = addRegion(regionsPerHost[newHost], region);<a name="line.868"></a>
-<span class="sourceLineNo">869</span>          primariesOfRegionsPerHost[newHost] = addRegionSorted(primariesOfRegionsPerHost[newHost], primary);<a name="line.869"></a>
-<span class="sourceLineNo">870</span>          if (oldHost &gt;= 0) {<a name="line.870"></a>
-<span class="sourceLineNo">871</span>            regionsPerHost[oldHost] = removeRegion(regionsPerHost[oldHost], region);<a name="line.871"></a>
-<span class="sourceLineNo">872</span>            primariesOfRegionsPerHost[oldHost] = removeRegion(<a name="line.872"></a>
-<span class="sourceLineNo">873</span>              primariesOfRegionsPerHost[oldHost], primary); // will still be sorted<a name="line.873"></a>
-<span class="sourceLineNo">874</span>          }<a name="line.874"></a>
-<span class="sourceLineNo">875</span>        }<a name="line.875"></a>
-<span class="sourceLineNo">876</span>      }<a name="line.876"></a>
-<span class="sourceLineNo">877</span><a name="line.877"></a>
-<span class="sourceLineNo">878</span>      // update for racks<a name="line.878"></a>
-<span class="sourceLineNo">879</span>      if (numRacks &gt; 1) {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>        int oldRack = oldServer &gt;= 0 ? serverIndexToRackIndex[oldServer] : -1;<a name="line.880"></a>
-<span class="sourceLineNo">881</span>        int newRack = serverIndexToRackIndex[newServer];<a name="line.881"></a>
-<span class="sourceLineNo">882</span>        if (newRack != oldRack) {<a name="line.882"></a>
-<span class="sourceLineNo">883</span>          regionsPerRack[newRack] = addRegion(regionsPerRack[newRack], region);<a name="line.883"></a>
-<span class="sourceLineNo">884</span>          primariesOfRegionsPerRack[newRack] = addRegionSorted(primariesOfRegionsPerRack[newRack], primary);<a name="line.884"></a>
-<span class="sourceLineNo">885</span>          if (oldRack &gt;= 0) {<a name="line.885"></a>
-<span class="sourceLineNo">886</span>            regionsPerRack[oldRack] = removeRegion(regionsPerRack[oldRack], region);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>            primariesOfRegionsPerRack[oldRack] = removeRegion(<a name="line.887"></a>
-<span class="sourceLineNo">888</span>              primariesOfRegionsPerRack[oldRack], primary); // will still be sorted<a name="line.888"></a>
-<span class="sourceLineNo">889</span>          }<a name="line.889"></a>
-<span class="sourceLineNo">890</span>        }<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      }<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    }<a name="line.892"></a>
-<span class="sourceLineNo">893</span><a name="line.893"></a>
-<span class="sourceLineNo">894</span>    int[] removeRegion(int[] regions, int regionIndex) {<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      //TODO: this maybe costly. Consider using linked lists<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      int[] newRegions = new int[regions.length - 1];<a name="line.896"></a>
-<span class="sourceLineNo">897</span>      int i = 0;<a name="line.897"></a>
-<span class="sourceLineNo">898</span>      for (i = 0; i &lt; regions.length; i++) {<a name="line.898"></a>
-<span class="sourceLineNo">899</span>        if (regions[i] == regionIndex) {<a name="line.899"></a>
-<span class="sourceLineNo">900</span>          break;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>        }<a name="line.901"></a>
-<span class="sourceLineNo">902</span>        newRegions[i] = regions[i];<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      }<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      System.arraycopy(regions, i+1, newRegions, i, newRegions.length - i);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      return newRegions;<a name="line.905"></a>
-<span class="sourceLineNo">906</span>    }<a name="line.906"></a>
-<span class="sourceLineNo">907</span><a name="line.907"></a>
-<span class="sourceLineNo">908</span>    int[] addRegion(int[] regions, int regionIndex) {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      int[] newRegions = new int[regions.length + 1];<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      System.arraycopy(regions, 0, newRegions, 0, regions.length);<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      newRegions[newRegions.length - 1] = regionIndex;<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      return newRegions;<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    }<a name="line.913"></a>
-<span class="sourceLineNo">914</span><a name="line.914"></a>
-<span class="sourceLineNo">915</span>    int[] addRegionSorted(int[] regions, int regionIndex) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>      int[] newRegions = new int[regions.length + 1];<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      int i = 0;<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      for (i = 0; i &lt; regions.length; i++) { // find the index to insert<a name="line.918"></a>
-<span class="sourceLineNo">919</span>        if (regions[i] &gt; regionIndex) {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>          break;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        }<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      }<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      System.arraycopy(regions, 0, newRegions, 0, i); // copy first half<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      System.arraycopy(regions, i, newRegions, i+1, regions.length - i); // copy second half<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      newRegions[i] = regionIndex;<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>      return newRegions;<a name="line.927"></a>
-<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
-<span class="sourceLineNo">929</span><a name="line.929"></a>
-<span class="sourceLineNo">930</span>    int[] replaceRegion(int[] regions, int regionIndex, int newRegionIndex) {<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      int i = 0;<a name="line.931"></a>
-<span class="sourceLineNo">932</span>      for (i = 0; i &lt; regions.length; i++) {<a name="line.932"></a>
-<span class="sourceLineNo">933</span>        if (regions[i] == regionIndex) {<a name="line.933"></a>
-<span class="sourceLineNo">934</span>          regions[i] = newRegionIndex;<a name="line.934"></a>
-<span class="sourceLineNo">935</span>          break;<a name="line.935"></a>
-<span class="sourceLineNo">936</span>        }<a name="line.936"></a>
-<span class="sourceLineNo">937</span>      }<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      return regions;<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    }<a name="line.939"></a>
-<span class="sourceLineNo">940</span><a name="line.940"></a>
-<span class="sourceLineNo">941</span>    void sortServersByRegionCount() {<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      Arrays.sort(serverIndicesSortedByRegionCount, numRegionsComparator);<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
-<span class="sourceLineNo">944</span><a name="line.944"></a>
-<span class="sourceLineNo">945</span>    int getNumRegions(int server) {<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      return regionsPerServer[server].length;<a name="line.946"></a>
-<span class="sourceLineNo">947</span>    }<a name="line.947"></a>
-<span class="sourceLineNo">948</span><a name="line.948"></a>
-<span class="sourceLineNo">949</span>    boolean contains(int[] arr, int val) {<a name="line.949"></a>
-<span class="sourceLineNo">950</span>      return Arrays.binarySearch(arr, val) &gt;= 0;<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    }<a name="line.951"></a>
-<span class="sourceLineNo">952</span><a name="line.952"></a>
-<span class="sourceLineNo">953</span>    private Comparator&lt;Integer&gt; numRegionsComparator = Comparator.comparingInt(this::getNumRegions);<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>    int getLowestLocalityRegionOnServer(int serverIndex) {<a name="line.955"></a>
-<span class="sourceLineNo">956</span>      if (regionFinder != null) {<a name="line.956"></a>
-<span class="sourceLineNo">957</span>        float lowestLocality = 1.0f;<a name="line.957"></a>
-<span class="sourceLineNo">958</span>        int lowestLocalityRegionIndex = -1;<a name="line.958"></a>
-<span class="sourceLineNo">959</span>        if (regionsPerServer[serverIndex].length == 0) {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          // No regions on that region server<a name="line.960"></a>
-<span class="sourceLineNo">961</span>          return -1;<a name="line.961"></a>
-<span class="sourceLineNo">962</span>        }<a name="line.962"></a>
-<span class="sourceLineNo">963</span>        for (int j = 0; j &lt; regionsPerServer[serverIndex].length; j++) {<a name="line.963"></a>
-<span class="sourceLineNo">964</span>          int regionIndex = regionsPerServer[serverIndex][j];<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          HDFSBlocksDistribution distribution = regionFinder<a name="line.965"></a>
-<span class="sourceLineNo">966</span>              .getBlockDistribution(regions[regionIndex]);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          float locality = distribution.getBlockLocalityIndex(servers[serverIndex].getHostname());<a name="line.967"></a>
-<span class="sourceLineNo">968</span>          // skip empty region<a name="line.968"></a>
-<span class="sourceLineNo">969</span>          if (distribution.getUniqueBlocksTotalWeight() == 0) {<a name="line.969"></a>
-<span class="sourceLineNo">970</span>            continue;<a name="line.970"></a>
-<span class="sourceLineNo">971</span>          }<a name="line.971"></a>
-<span class="sourceLineNo">972</span>          if (locality &lt; lowestLocality) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>            lowestLocality = locality;<a name="line.973"></a>
-<span class="sourceLineNo">974</span>            lowestLocalityRegionIndex = j;<a name="line.974"></a>
-<span class="sourceLineNo">975</span>          }<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        }<a name="line.976"></a>
-<span class="sourceLineNo">977</span>        if (lowestLocalityRegionIndex == -1) {<a name="line.977"></a>
-<span class="sourceLineNo">978</span>          return -1;<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        }<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        if (LOG.isTraceEnabled()) {<a name="line.980"></a>
-<span class="sourceLineNo">981</span>          LOG.trace("Lowest locality region is "<a name="line.981"></a>
-<span class="sourceLineNo">982</span>              + regions[regionsPerServer[serverIndex][lowestLocalityRegionIndex]]<a name="line.982"></a>
-<span class="sourceLineNo">983</span>                  .getRegionNameAsString() + " with locality " + lowestLocality<a name="line.983"></a>
-<span class="sourceLineNo">984</span>              + " and its region server contains " + regionsPerServer[serverIndex].length<a name="line.984"></a>
-<span class="sourceLineNo">985</span>              + " regions");<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        }<a name="line.986"></a>
-<span class="sourceLineNo">987</span>        return regionsPerServer[serverIndex][lowestLocalityRegionIndex];<a name="line.987"></a>
-<span class="sourceLineNo">988</span>      } else {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>        return -1;<a name="line.989"></a>
-<span class="sourceLineNo">990</span>      }<a name="line.990"></a>
-<span class="sourceLineNo">991</span>    }<a name="line.991"></a>
-<span class="sourceLineNo">992</span><a name="line.992"></a>
-<span class="sourceLineNo">993</span>    float getLocalityOfRegion(int region, int server) {<a name="line.993"></a>
-<span class="sourceLineNo">994</span>      if (regionFinder != null) {<a name="line.994"></a>
-<span class="sourceLineNo">995</span>        HDFSBlocksDistribution distribution = regionFinder.getBlockDistribution(regions[region]);<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        return distribution.getBlockLocalityIndex(servers[server].getHostname());<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      } else {<a name="line.997"></a>
-<span class="sourceLineNo">998</span>        return 0f;<a name="line.998"></a>
-<span class="sourceLineNo">999</span>      }<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>    }<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span><a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    @VisibleForTesting<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    protected void setNumRegions(int numRegions) {<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>      this.numRegions = numRegions;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>    }<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span><a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>    @VisibleForTesting<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>    protected void setNumMovedRegions(int numMovedRegions) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>      this.numMovedRegions = numMovedRegions;<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>    }<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="SBSC_USE_STRINGBUFFER_CONCATENATION",<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>        justification="Not important but should be fixed")<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>    @Override<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    public String toString() {<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      StringBuilder desc = new StringBuilder("Cluster={servers=[");<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      for(ServerName sn:servers) {<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        desc.append(sn.getAddress().toString()).append(", ");<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      }<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>      desc.append("], serverIndicesSortedByRegionCount=")<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>          .append(Arrays.toString(serverIndicesSortedByRegionCount))<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>          .append(", regionsPerServer=").append(Arrays.deepToString(regionsPerServer));<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      desc.append(", numMaxRegionsPerTable=").append(Arrays.toString(numMaxRegionsPerTable))<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>          .append(", numRegions=").append(numRegions).append(", numServers=").append(numServers)<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>          .append(", numTables=").append(numTables).append(", numMovedRegions=")<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>          .append(numMovedRegions).append('}');<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>      return desc.toString();<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    }<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>  }<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span><a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>  // slop for regions<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  protected float slop;<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>  // overallSlop to control simpleLoadBalancer's cluster level threshold<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  protected float overallSlop;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>  protected Configuration config = HBaseConfiguration.create();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>  protected RackManager rackManager;<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>  private static final Random RANDOM = new Random(System.currentTimeMillis());<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>  private static final Logger LOG = LoggerFactory.getLogger(BaseLoadBalancer.class);<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  protected MetricsBalancer metricsBalancer = null;<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>  protected ClusterMetrics clusterStatus = null;<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>  protected ServerName masterServerName;<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  protected MasterServices services;<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>  protected boolean onlySystemTablesOnMaster;<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>  protected boolean maintenanceMode;<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  @Override<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  public void setConf(Configuration conf) {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    this.config = conf;<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    setSlop(conf);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    if (slop &lt; 0) slop = 0;<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>    else if (slop &gt; 1) slop = 1;<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span><a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    if (overallSlop &lt; 0) overallSlop = 0;<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    else if (overallSlop &gt; 1) overallSlop = 1;<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span><a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    this.onlySystemTablesOnMaster = LoadBalancer.isSystemTablesOnlyOnMaster(this.config);<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span><a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    this.rackManager = new RackManager(getConf());<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    if (useRegionFinder) {<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>      regionFinder.setConf(conf);<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    this.isByTable = conf.getBoolean(HConstants.HBASE_MASTER_LOADBALANCE_BYTABLE, isByTable);<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    // Print out base configs. Don't print overallSlop since it for simple balancer exclusively.<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    LOG.info("slop={}, systemTablesOnMaster={}",<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>        this.slop, this.onlySystemTablesOnMaster);<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>  }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span><a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  protected void setSlop(Configuration conf) {<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    this.slop = conf.getFloat("hbase.regions.slop", (float) 0.2);<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    this.overallSlop = conf.getFloat("hbase.regions.overallSlop", slop);<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>  }<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span><a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>  /**<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>   * Check if a region belongs to some system table.<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>   * If so, the primary replica may be expected to be put on the master regionserver.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>   */<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>  public boolean shouldBeOnMaster(RegionInfo region) {<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    return (this.maintenanceMode || this.onlySystemTablesOnMaster)<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>        &amp;&amp; region.getTable().isSystemTable();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>  }<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>  /**<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>   * Balance the regions that should be on master regionserver.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>   */<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>  protected List&lt;RegionPlan&gt; balanceMasterRegions(Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; clusterMap) {<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    if (masterServerName == null || clusterMap == null || clusterMap.size() &lt;= 1) return null;<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    List&lt;RegionPlan&gt; plans = null;<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    List&lt;RegionInfo&gt; regions = clusterMap.get(masterServerName);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    if (regions != null) {<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>      Iterator&lt;ServerName&gt; keyIt = null;<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      for (RegionInfo region: regions) {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>        if (shouldBeOnMaster(region)) continue;<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>        // Find a non-master regionserver to host the region<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>        if (keyIt == null || !keyIt.hasNext()) {<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>          keyIt = clusterMap.keySet().iterator();<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        }<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        ServerName dest = keyIt.next();<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>        if (masterServerName.equals(dest)) {<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>          if (!keyIt.hasNext()) {<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>            keyIt = clusterMap.keySet().iterator();<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>          }<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>          dest = keyIt.next();<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>        }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        // Move this region away from the master regionserver<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        RegionPlan plan = new RegionPlan(region, masterServerName, dest);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>        if (plans == null) {<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>          plans = new ArrayList&lt;&gt;();<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        }<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        plans.add(plan);<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>      }<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    for (Map.Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; server: clusterMap.entrySet()) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      if (masterServerName.equals(server.getKey())) continue;<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      for (RegionInfo region: server.getValue()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        if (!shouldBeOnMaster(region)) continue;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span><a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        // Move this region to the master regionserver<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>        RegionPlan plan = new RegionPlan(region, server.getKey(), masterServerName);<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        if (plans == null) {<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>          plans = new ArrayList&lt;&gt;();<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>        }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        plans.add(plan);<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      }<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    }<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    return plans;<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>  }<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>  /**<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>   * If master is configured to carry system tables only, in here is<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>   * where we figure what to assign it.<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>   */<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  protected Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignMasterSystemRegions(<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>      Collection&lt;RegionInfo&gt; regions, List&lt;ServerName&gt; servers) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    if (servers == null || regions == null || regions.isEmpty()) {<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      return null;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; assignments = new TreeMap&lt;&gt;();<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    if (this.maintenanceMode || this.onlySystemTablesOnMaster) {<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>      if (masterServerName != null &amp;&amp; servers.contains(masterServerName)) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>        assignments.put(masterServerName, new ArrayList&lt;&gt;());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>        for (RegionInfo region : regions) {<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>          if (shouldBeOnMaster(region)) {<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>            assignments.get(masterServerName).add(region);<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>          }<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        }<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>    return assignments;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span><a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>  @Override<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  public Configuration getConf() {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    return this.config;<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  @Override<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public synchronized void setClusterMetrics(ClusterMetrics st) {<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    this.clusterStatus = st;<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    if (useRegionFinder) {<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>      regionFinder.setClusterMetrics(st);<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    }<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>  }<a name="line.1165"></a>
+<span class="sourceLineNo">021</span>import edu.umd.cs.findbugs.annotations.NonNull;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.IOException;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.Arrays;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.util.Collection;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.Collections;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.util.Comparator;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.Deque;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.HashMap;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.Map;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Map.Entry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.NavigableMap;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.Random;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.Set;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.TreeMap;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.function.Predicate;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.stream.Collectors;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.commons.lang3.NotImplementedException;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.conf.Configuration;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.ClusterMetrics;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.HBaseIOException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.HConstants;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.HDFSBlocksDistribution;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.ServerMetrics;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.ServerName;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.TableName;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.RegionReplicaUtil;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.master.LoadBalancer;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.master.MasterServices;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.master.RackManager;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.master.RegionPlan;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.namequeues.NamedQueueRecorder;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.net.Address;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hbase.thirdparty.com.google.common.base.Joiner;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hbase.thirdparty.com.google.common.collect.Sets;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.slf4j.Logger;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.slf4j.LoggerFactory;<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> * The base class for load balancers. It provides the the functions used to by<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * {@link org.apache.hadoop.hbase.master.assignment.AssignmentManager} to assign regions<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * in the edge cases. It doesn't provide an implementation of the<a name="line.73"></a>
+<span class="sourceLineNo">074</span> * actual balancing algorithm.<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>@InterfaceAudience.Private<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public abstract class BaseLoadBalancer implements LoadBalancer {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  public static final String BALANCER_DECISION_BUFFER_ENABLED =<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    "hbase.master.balancer.decision.buffer.enabled";<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  public static final boolean DEFAULT_BALANCER_DECISION_BUFFER_ENABLED = false;<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  protected static final int MIN_SERVER_BALANCE = 2;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private volatile boolean stopped = false;<a name="line.85"></a>
+<span class="sourceLineNo">086</span><a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private static final List&lt;RegionInfo&gt; EMPTY_REGION_LIST = Collections.emptyList();<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span>  static final Predicate&lt;ServerMetrics&gt; IDLE_SERVER_PREDICATOR<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    = load -&gt; load.getRegionMetrics().isEmpty();<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  protected RegionLocationFinder regionFinder;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  protected boolean useRegionFinder;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  protected boolean isByTable = false;<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>   * Use to add balancer decision history to ring-buffer<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  protected NamedQueueRecorder namedQueueRecorder;<a name="line.99"></a>
+<span class="sourceLineNo">100</span><a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private static class DefaultRackManager extends RackManager {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    @Override<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public String getRack(ServerName server) {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      return UNKNOWN_RACK;<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><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  /**<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * The constructor that uses the basic MetricsBalancer<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  protected BaseLoadBalancer() {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    metricsBalancer = new MetricsBalancer();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    createRegionFinder();<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>  /**<a name="line.116"></a>
+<span class="sourceLineNo">117</span>   * This Constructor accepts an instance of MetricsBalancer,<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * which will be used instead of creating a new one<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  protected BaseLoadBalancer(MetricsBalancer metricsBalancer) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    this.metricsBalancer = (metricsBalancer != null) ? metricsBalancer : new MetricsBalancer();<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    createRegionFinder();<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 createRegionFinder() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    useRegionFinder = config.getBoolean("hbase.master.balancer.uselocality", true);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    if (useRegionFinder) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      regionFinder = new RegionLocationFinder();<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><a name="line.131"></a>
+<span class="sourceLineNo">132</span>  /**<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   * An efficient array based implementation similar to ClusterState for keeping<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * the status of the cluster in terms of region assignment and distribution.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * LoadBalancers, such as StochasticLoadBalancer uses this Cluster object because of<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * hundreds of thousands of hashmap manipulations are very costly, which is why this<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   * class uses mostly indexes and arrays.<a name="line.137"></a>
+<span class="sourceLineNo">138</span>   *<a name="line.138"></a>
+<span class="sourceLineNo">139</span>   * Cluster tracks a list of unassigned regions, region assignments, and the server<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * topology in terms of server names, hostnames and racks.<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   */<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  protected static class Cluster {<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    ServerName[] servers;<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    String[] hosts; // ServerName uniquely identifies a region server. multiple RS can run on the same host<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    String[] racks;<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    boolean multiServersPerHost = false; // whether or not any host has more than one server<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>    ArrayList&lt;String&gt; tables;<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    RegionInfo[] regions;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    Deque&lt;BalancerRegionLoad&gt;[] regionLoads;<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    private RegionLocationFinder regionFinder;<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>    int[][] regionLocations; //regionIndex -&gt; list of serverIndex sorted by locality<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>    int[]   serverIndexToHostIndex;      //serverIndex -&gt; host index<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    int[]   serverIndexToRackIndex;      //serverIndex -&gt; rack index<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>    int[][] regionsPerServer;            //serverIndex -&gt; region list<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    int[]   serverIndexToRegionsOffset;  //serverIndex -&gt; offset of region list<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    int[][] regionsPerHost;              //hostIndex -&gt; list of regions<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    int[][] regionsPerRack;              //rackIndex -&gt; region list<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    int[][] primariesOfRegionsPerServer; //serverIndex -&gt; sorted list of regions by primary region index<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    int[][] primariesOfRegionsPerHost;   //hostIndex -&gt; sorted list of regions by primary region index<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    int[][] primariesOfRegionsPerRack;   //rackIndex -&gt; sorted list of regions by primary region index<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>    int[][] serversPerHost;              //hostIndex -&gt; list of server indexes<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    int[][] serversPerRack;              //rackIndex -&gt; list of server indexes<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    int[]   regionIndexToServerIndex;    //regionIndex -&gt; serverIndex<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    int[]   initialRegionIndexToServerIndex;    //regionIndex -&gt; serverIndex (initial cluster state)<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    int[]   regionIndexToTableIndex;     //regionIndex -&gt; tableIndex<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    int[][] numRegionsPerServerPerTable; //serverIndex -&gt; tableIndex -&gt; # regions<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    int[]   numMaxRegionsPerTable;       //tableIndex -&gt; max number of regions in a single RS<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int[]   regionIndexToPrimaryIndex;   //regionIndex -&gt; regionIndex of the primary<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    boolean hasRegionReplicas = false;   //whether there is regions with replicas<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span>    Integer[] serverIndicesSortedByRegionCount;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    Integer[] serverIndicesSortedByLocality;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>    Map&lt;Address, Integer&gt; serversToIndex;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    Map&lt;String, Integer&gt; hostsToIndex;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    Map&lt;String, Integer&gt; racksToIndex;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    Map&lt;String, Integer&gt; tablesToIndex;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    Map&lt;RegionInfo, Integer&gt; regionsToIndex;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    float[] localityPerServer;<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>    int numServers;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    int numHosts;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    int numRacks;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    int numTables;<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    int numRegions;<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    int numMovedRegions = 0; //num moved regions from the initial configuration<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; clusterState;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>    protected final RackManager rackManager;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // Maps region -&gt; rackIndex -&gt; locality of region on rack<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private float[][] rackLocalities;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // Maps localityType -&gt; region -&gt; [server|rack]Index with highest locality<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private int[][] regionsToMostLocalEntities;<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    protected Cluster(<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; clusterState,<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads,<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        RegionLocationFinder regionFinder,<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        RackManager rackManager) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this(null, clusterState, loads, regionFinder, rackManager);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span>    @SuppressWarnings("unchecked")<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    protected Cluster(<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        Collection&lt;RegionInfo&gt; unassignedRegions,<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        Map&lt;ServerName, List&lt;RegionInfo&gt;&gt; clusterState,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads,<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        RegionLocationFinder regionFinder,<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        RackManager rackManager) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>      if (unassignedRegions == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        unassignedRegions = EMPTY_REGION_LIST;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      }<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>      serversToIndex = new HashMap&lt;&gt;();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      hostsToIndex = new HashMap&lt;&gt;();<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      racksToIndex = new HashMap&lt;&gt;();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      tablesToIndex = new HashMap&lt;&gt;();<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>      //TODO: We should get the list of tables from master<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      tables = new ArrayList&lt;&gt;();<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      this.rackManager = rackManager != null ? rackManager : new DefaultRackManager();<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>      numRegions = 0;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>      List&lt;List&lt;Integer&gt;&gt; serversPerHostList = new ArrayList&lt;&gt;();<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      List&lt;List&lt;Integer&gt;&gt; serversPerRackList = new ArrayList&lt;&gt;();<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      this.clusterState = clusterState;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      this.regionFinder = regionFinder;<a name="line.235"></a>
+<span class="sourceLineNo">236</span><a name="line.236"></a>
+<span class="sourceLineNo">237</span>      // Use servername and port as there can be dead servers in this list. We want everything with<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      // a matching hostname and port to have the same index.<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      for (ServerName sn : clusterState.keySet()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        if (sn == null) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          LOG.warn("TODO: Enable TRACE on BaseLoadBalancer. Empty servername); " +<a name="line.241"></a>
+<span class="sourceLineNo">242</span>              "skipping; unassigned regions?");<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          if (LOG.isTraceEnabled()) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>            LOG.trace("EMPTY SERVERNAME " + clusterState.toString());<a name="line.244"></a>
+<span class="sourceLineNo">245</span>          }<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          continue;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
+<span class="sourceLineNo">248</span>        if (serversToIndex.get(sn.getAddress()) == null) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          serversToIndex.put(sn.getAddress(), numServers++);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        if (!hostsToIndex.containsKey(sn.getHostname())) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          hostsToIndex.put(sn.getHostname(), numHosts++);<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          serversPerHostList.add(new ArrayList&lt;&gt;(1));<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>        int serverIndex = serversToIndex.get(sn.getAddress());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        int hostIndex = hostsToIndex.get(sn.getHostname());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        serversPerHostList.get(hostIndex).add(serverIndex);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>        String rack = this.rackManager.getRack(sn);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        if (!racksToIndex.containsKey(rack)) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          racksToIndex.put(rack, numRacks++);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          serversPerRackList.add(new ArrayList&lt;&gt;());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        int rackIndex = racksToIndex.get(rack);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        serversPerRackList.get(rackIndex).add(serverIndex);<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>      // Count how many regions there are.<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      for (Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : clusterState.entrySet()) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        numRegions += entry.getValue().size();<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      numRegions += unassignedRegions.size();<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>      regionsToIndex = new HashMap&lt;&gt;(numRegions);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      servers = new ServerName[numServers];<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      serversPerHost = new int[numHosts][];<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      serversPerRack = new int[numRacks][];<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      regions = new RegionInfo[numRegions];<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      regionIndexToServerIndex = new int[numRegions];<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      initialRegionIndexToServerIndex = new int[numRegions];<a name="line.281"></a>
+<span class="sourceLineNo">282</span>      regionIndexToTableIndex = new int[numRegions];<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      regionIndexToPrimaryIndex = new int[numRegions];<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      regionLoads = new Deque[numRegions];<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      regionLocations = new int[numRegions][];<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      serverIndicesSortedByRegionCount = new Integer[numServers];<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      serverIndicesSortedByLocality = new Integer[numServers];<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      localityPerServer = new float[numServers];<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>      serverIndexToHostIndex = new int[numServers];<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      serverIndexToRackIndex = new int[numServers];<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      regionsPerServer = new int[numServers][];<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      serverIndexToRegionsOffset = new int[numServers];<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      regionsPerHost = new int[numHosts][];<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      regionsPerRack = new int[numRacks][];<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      primariesOfRegionsPerServer = new int[numServers][];<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      primariesOfRegionsPerHost = new int[numHosts][];<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      primariesOfRegionsPerRack = new int[numRacks][];<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      int tableIndex = 0, regionIndex = 0, regionPerServerIndex = 0;<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>      for (Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : clusterState.entrySet()) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>        if (entry.getKey() == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          LOG.warn("SERVERNAME IS NULL, skipping " + entry.getValue());<a name="line.305"></a>
+<span class="sourceLineNo">306</span>          continue;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>        int serverIndex = serversToIndex.get(entry.getKey().getAddress());<a name="line.308"></a>
+<span class="sourceLineNo">309</span><a name="line.309"></a>
+<span class="sourceLineNo">310</span>        // keep the servername if this is the first server name for this hostname<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        // or this servername has the newest startcode.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        if (servers[serverIndex] == null ||<a name="line.312"></a>
+<span class="sourceLineNo">313</span>            servers[serverIndex].getStartcode() &lt; entry.getKey().getStartcode()) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>          servers[serverIndex] = entry.getKey();<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">317</span>        if (regionsPerServer[serverIndex] != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          // there is another server with the same hostAndPort in ClusterState.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          // allocate the array for the total size<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          regionsPerServer[serverIndex] = new int[entry.getValue().size() + regionsPerServer[serverIndex].length];<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        } else {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          regionsPerServer[serverIndex] = new int[entry.getValue().size()];<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        primariesOfRegionsPerServer[serverIndex] = new int[regionsPerServer[serverIndex].length];<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        serverIndicesSortedByRegionCount[serverIndex] = serverIndex;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        serverIndicesSortedByLocality[serverIndex] = serverIndex;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>      hosts = new String[numHosts];<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      for (Entry&lt;String, Integer&gt; entry : hostsToIndex.entrySet()) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        hosts[entry.getValue()] = entry.getKey();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      racks = new String[numRacks];<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      for (Entry&lt;String, Integer&gt; entry : racksToIndex.entrySet()) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        racks[entry.getValue()] = entry.getKey();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>      for (Entry&lt;ServerName, List&lt;RegionInfo&gt;&gt; entry : clusterState.entrySet()) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>        int serverIndex = serversToIndex.get(entry.getKey().getAddress());<a name="line.339"></a>
+<span class="sourceLineNo">340</span>        regionPerServerIndex = serverIndexToRegionsOffset[serverIndex];<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>        int hostIndex = hostsToIndex.get(entry.getKey().getHostname());<a name="line.342"></a>
+<span class="sourceLineNo">343</span>        serverIndexToHostIndex[serverIndex] = hostIndex;<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>        int rackIndex = racksToIndex.get(this.rackManager.getRack(entry.getKey()));<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        serverIndexToRackIndex[serverIndex] = rackIndex;<a name="line.346"></a>
+<span class="sourceLineNo">347</span><a name="line.347"></a>
+<span class="sourceLineNo">348</span>        for (RegionInfo region : entry.getValue()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          registerRegion(region, regionIndex, serverIndex, loads, regionFinder);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          regionsPerServer[serverIndex][regionPerServerIndex++] = regionIndex;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>          regionIndex++;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>        }<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        serverIndexToRegionsOffset[serverIndex] = regionPerServerIndex;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>      for (RegionInfo region : unassignedRegions) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        registerRegion(region, regionIndex, -1, loads, regionFinder);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        regionIndex++;<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>      for (int i = 0; i &lt; serversPerHostList.size(); i++) {<a name="line.361"></a>
+<span class="sourceLineNo">362</span>        serversPerHost[i] = new int[serversPerHostList.get(i).size()];<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        for (int j = 0; j &lt; serversPerHost[i].length; j++) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          serversPerHost[i][j] = serversPerHostList.get(i).get(j);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>        if (serversPerHost[i].length &gt; 1) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>          multiServersPerHost = true;<a name="line.367"></a>
+<span class="sourceLineNo">368</span>        }<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      }<a name="line.369"></a>
+<span class="sourceLineNo">370</span><a name="line.370"></a>
+<span class="sourceLineNo">371</span>      for (int i = 0; i &lt; serversPerRackList.size(); i++) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>        serversPerRack[i] = new int[serversPerRackList.get(i).size()];<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        for (int j = 0; j &lt; serversPerRack[i].length; j++) {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>          serversPerRack[i][j] = serversPerRackList.get(i).get(j);<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        }<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span><a name="line.377"></a>
+<span class="sourceLineNo">378</span>      numTables = tables.size();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      numRegionsPerServerPerTable = new int[numServers][numTables];<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>      for (int i = 0; i &lt; numServers; i++) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>        for (int j = 0; j &lt; numTables; j++) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>          numRegionsPerServerPerTable[i][j] = 0;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        }<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      }<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>      for (int i=0; i &lt; regionIndexToServerIndex.length; i++) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        if (regionIndexToServerIndex[i] &gt;= 0) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          numRegionsPerServerPerTable[regionIndexToServerIndex[i]][regionIndexToTableIndex[i]]++;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        }<a name="line.390"></a>
+<span class="sourceLineNo">391</span>      }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>      numMaxRegionsPerTable = new int[numTables];<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      for (int[] aNumRegionsPerServerPerTable : numRegionsPerServerPerTable) {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        for (tableIndex = 0; tableIndex &lt; aNumRegionsPerServerPerTable.length; tableIndex++) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          if (aNumRegionsPerServerPerTable[tableIndex] &gt; numMaxRegionsPerTable[tableIndex]) {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>            numMaxRegionsPerTable[tableIndex] = aNumRegionsPerServerPerTable[tableIndex];<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          }<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>      for (int i = 0; i &lt; regions.length; i ++) {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        RegionInfo info = regions[i];<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        if (RegionReplicaUtil.isDefaultReplica(info)) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>          regionIndexToPrimaryIndex[i] = i;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        } else {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>          hasRegionReplicas = true;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          RegionInfo primaryInfo = RegionReplicaUtil.getRegionInfoForDefaultReplica(info);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          regionIndexToPrimaryIndex[i] = regionsToIndex.getOrDefault(primaryInfo, -1);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        }<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span><a name="line.412"></a>
+<span class="sourceLineNo">413</span>      for (int i = 0; i &lt; regionsPerServer.length; i++) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        primariesOfRegionsPerServer[i] = new int[regionsPerServer[i].length];<a name="line.414"></a>
+<span class="sourceLineNo">415</span>        for (int j = 0; j &lt; regionsPerServer[i].length; j++) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>          int primaryIndex = regionIndexToPrimaryIndex[regionsPerServer[i][j]];<a name="line.416"></a>
+<span class="sourceLineNo">417</span>          primariesOfRegionsPerServer[i][j] = primaryIndex;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        // sort the regions by primaries.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        Arrays.sort(primariesOfRegionsPerServer[i]);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      }<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>      // compute regionsPerHost<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      if (multiServersPerHost) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>        for (int i = 0 ; i &lt; serversPerHost.length; i++) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          int numRegionsPerHost = 0;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          for (int j = 0; j &lt; serversPerHost[i].length; j++) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>            numRegionsPerHost += regionsPerServer[serversPerHost[i][j]].length;<a name="line.428"></a>
+<span class="sourceLineNo">429</span>          }<a name="line.429"></a>
+<span class="sourceLineNo">430</span>          regionsPerHost[i] = new int[numRegionsPerHost];<a name="line.430"></a>
+<span class="sourceLineNo">431</span>          primariesOfRegionsPerHost[i] = new int[numRegionsPerHost];<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        for (int i = 0 ; i &lt; serversPerHost.length; i++) {<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          int numRegionPerHostIndex = 0;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          for (int j = 0; j &lt; serversPerHost[i].length; j++) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>            for (int k = 0; k &lt; regionsPerServer[serversPerHost[i][j]].length; k++) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>              int region = regionsPerServer[serversPerHost[i][j]][k];<a name="line.437"></a>
+<span class="sourceLineNo">438</span>              regionsPerHost[i][numRegionPerHostIndex] = region;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>              int primaryIndex = regionIndexToPrimaryIndex[region];<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              primariesOfRegionsPerHost[i][numRegionPerHostIndex] = primaryIndex;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>              numRegionPerHostIndex++;<a name="line.441"></a>
+<span class="sourceLineNo">442</span>            }<a name="line.442"></a>
+<span class="sourceLineNo">443</span>          }<a name="line.443"></a>
+<span class="sourceLineNo">444</span>          // sort the regions by primaries.<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          Arrays.sort(primariesOfRegionsPerHost[i]);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>      // compute regionsPerRack<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      if (numRacks &gt; 1) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        for (int i = 0 ; i &lt; serversPerRack.length; i++) {<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          int numRegionsPerRack = 0;<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          for (int j = 0; j &lt; serversPerRack[i].length; j++) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>            numRegionsPerRack += regionsPerServer[serversPerRack[i][j]].length;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>          }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>          regionsPerRack[i] = new int[numRegionsPerRack];<a name="line.456"></a>
+<span class="sourceLineNo">457</span>          primariesOfRegionsPerRack[i] = new int[numRegionsPerRack];<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        }<a name="line.458"></a>
+<span class="sourceLineNo">459</span><a name="line.459"></a>
+<span class="sourceLineNo">460</span>        for (int i = 0 ; i &lt; serversPerRack.length; i++) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          int numRegionPerRackIndex = 0;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>          for (int j = 0; j &lt; serversPerRack[i].length; j++) {<a name="line.462"></a>
+<span class="sourceLineNo">463</span>            for (int k = 0; k &lt; regionsPerServer[serversPerRack[i][j]].length; k++) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>              int region = regionsPerServer[serversPerRack[i][j]][k];<a name="line.464"></a>
+<span class="sourceLineNo">465</span>              regionsPerRack[i][numRegionPerRackIndex] = region;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>              int primaryIndex = regionIndexToPrimaryIndex[region];<a name="line.466"></a>
+<span class="sourceLineNo">467</span>              primariesOfRegionsPerRack[i][numRegionPerRackIndex] = primaryIndex;<a name="line.467"></a>
+<span class="sourceLineNo">468</span>              numRegionPerRackIndex++;<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>          // sort the regions by primaries.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>          Arrays.sort(primariesOfRegionsPerRack[i]);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>        }<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>    /** Helper for Cluster constructor to handle a region */<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    private void registerRegion(RegionInfo region, int regionIndex,<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        int serverIndex, Map&lt;String, Deque&lt;BalancerRegionLoad&gt;&gt; loads,<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        RegionLocationFinder regionFinder) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      String tableName = region.getTable().getNameAsString();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (!tablesToIndex.containsKey(tableName)) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        tables.add(tableName);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        tablesToIndex.put(tableName, tablesToIndex.size());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>      }<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      int tableIndex = tablesToIndex.get(tableName);<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      regionsToIndex.put(region, regionIndex);<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      regions[regionIndex] = region;<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      regionIndexToServerIndex[regionIndex] = serverIndex;<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      initialRegionIndexToServerIndex[regionIndex] = serverIndex;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      regionIndexToTableIndex[regionIndex] = tableIndex;<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>      // region load<a name="line.494"></a>
+<span class="sourceLineNo">495</span>      if (loads != null) {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>        Deque&lt;BalancerRegionLoad&gt; rl = loads.get(region.getRegionNameAsString());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>        // That could have failed if the RegionLoad is using the other regionName<a name="line.497"></a>
+<span class="sourceLineNo">498</span>        if (rl == null) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span>          // Try getting the region load using encoded name.<a name="line.499"></a>
+<span class="sourceLineNo">500</span>          rl = loads.get(region.getEncodedName());<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>        regionLoads[regionIndex] = rl;<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      }<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span>      if (regionFinder != null) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>        // region location<a name="line.506"></a>
+<span class="sourceLineNo">507</span>        List&lt;ServerName&gt; loc = regionFinder.getTopBlockLocations(region);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>        regionLocations[regionIndex] = new int[loc.size()];<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        for (int i = 0; i &lt; loc.size(); i++) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>          regionLocations[regionIndex][i] = loc.get(i) == null ? -1<a name="line.510"></a>
+<span class="sourceLineNo">511</span>              : (serversToIndex.get(loc.get(i).getAddress()) == null ? -1<a name="line.511"></a>
+<span class="sourceLineNo">512</span>                  : serversToIndex.get(loc.get(i).getAddress()));<a name="line.512"></a>
+<span class="sourceLineNo">513</span>        }<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      }<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    }<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>    /**<a name="line.517"></a>
+<span class="sourceLineNo">518</span>     * Returns true iff a given server has less regions than the balanced amount<a name="line.518"></a>
+<span class="sourceLineNo">519</span>     */<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    public boolean serverHasTooFewRegions(int server) {<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      int minLoad = this.numRegions / numServers;<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      int numRegions = getNumRegions(server);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      return numRegions &lt; minLoad;<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>    /**<a name="line.526"></a>
+<span class="sourceLineNo">527</span>     * Retrieves and lazily initializes a field storing the locality of<a name="line.527"></a>
+<span class="sourceLineNo">528</span>     * every region/server combination<a name="line.528"></a>
+<span class="sourceLineNo">529</span>     */<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    public float[][] getOrComputeRackLocalities() {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (rackLocalities == null || regionsToMostLocalEntities == null) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        computeCachedLocalities();<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      }<a name="line.533"></a>
+<span class="sourceLineNo">534</span>      return rackLocalities;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    }<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>    /**<a name="line.537"></a>
+<span class="sourceLineNo">538</span>     * Lazily initializes and retrieves a mapping of region -&gt; server for which region has<a name="line.538"></a>
+<span class="sourceLineNo">539</span>     * the highest the locality<a name="line.539"></a>
+<span class="sourceLineNo">540</span>     */<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    public int[] getOrComputeRegionsToMostLocalEntities(LocalityType type) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>      if (rackLocalities == null || regionsToMostLocalEntities == null) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        computeCachedLocalities();<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
+<span class="sourceLineNo">545</span>      return regionsToMostLocalEntities[type.ordinal()];<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>    /**<a name="line.548"></a>
+<span class="sourceLineNo">549</span>     * Looks up locality from cache of localities. Will create cache if it does<a name="line.549"></a>
+<span class="sourceLineNo">550</span>     * not already exist.<a name="line.550"></a>
+<span class="sourceLineNo">551</span>     */<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    public float getOrComputeLocality(int region, int entity, LocalityType type) {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      switch (type) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span>        case SERVER:<a name="line.554"></a>
+<span class="sourceLineNo">555</span>          return getLocalityOfRegion(region, entity);<a name="line.555"></a>
+<span class="sourceLineNo">556</span>        case RACK:<a name="line.556"></a>
+<span class="sourceLineNo">557</span>          return getOrComputeRackLocalities()[region][entity];<a name="line.557"></a>
+<span class="sourceLineNo">558</span>        default:<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          throw new IllegalArgumentException("Unsupported LocalityType: " + type);<a name="line.559"></a>
+<span class="sourceLineNo">560</span>      }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
+<span class="sourceLineNo">562</span><a name="line.562"></a>
+<span class="sourceLineNo">563</span>    /**<a name="line.563"></a>
+<span class="sourceLineNo">564</span>     * Returns locality weighted by region size in MB. Will create locality cache<a name="line.564"></a>
+<span class="sourceLineNo">565</span>     * if it does not already exist.<a name="line.565"></a>
+<span class="sourceLineNo">566</span>     */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    public double getOrComputeWeightedLocality(int region, int server, LocalityType type) {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>      return getRegionSizeMB(region) * getOrComputeLocality(region, server, type);<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    }<a name="line.569"></a>
+<span class="sourceLineNo">570</span><a name="line.570"></a>
+<span class="sourceLineNo">571</span>    /**<a name="line.571"></a>
+<span class="sourceLineNo">572</span>     * Returns the size in MB from the most recent RegionLoad for region<a name="line.572"></a>
+<span class="sourceLineNo">573</span>     */<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    public int getRegionSizeMB(int region) {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      Deque&lt;BalancerRegionLoad&gt; load = regionLoads[region];<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      // This means regions have no actual data on disk<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      if (load == null) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        return 0;<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      return regionLoads[region].getLast().getStorefileSizeMB();<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>    /**<a name="line.583"></a>
+<span class="sourceLineNo">584</span>     * Computes and caches the locality for each region/rack combinations,<a name="line.584"></a>
+<span class="sourceLineNo">585</span>     * as well as storing a mapping of region -&gt; server and region -&gt; rack such that server<a name="line.585"></a>
+<span class="sourceLineNo">586</span>     * and rack have the highest locality for region<a name="line.586"></a>
+<span class="sourceLineNo">587</span>     */<a name="line.587"></a>
+<span class="sourceLineNo">588</span>    private void computeCachedLocalities() {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>      rackLocalities = new float[numRegions][numRacks];<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      regionsToMostLocalEntities = new int[LocalityType.values().length][numRegions];<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>      // Compute localities and find most local server per region<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      for (int region = 0; region &lt; numRegions; region++) {<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        int serverWithBestLocality = 0;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        float bestLocalityForRegion = 0;<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        for (int server = 0; server &lt; numServers; server++) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>          // Aggregate per-rack locality<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          float locality = getLocalityOfRegion(region, server);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>          int rack = serverIndexToRackIndex[server];<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          int numServersInRack = serversPerRack[rack].length;<a name="line.600"></a>
+<span class="sourceLineNo">601</span>          rackLocalities[region][rack] += locality / numServersInRack;<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>          if (locality &gt; bestLocalityForRegion) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>            serverWithBestLocality = server;<a name="line.604"></a>
+<span class="sourceLineNo">605</span>            bestLocalityForRegion = locality;<a name="line.605"></a>
+<span class="sourceLineNo">606</span>          }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>        }<a name="line.607"></a>
+<span class="sourceLineNo">608</span>        regionsToMostLocalEntities[LocalityType.SERVER.ordinal()][region] = serverWithBestLocality;<a name="line.608"></a>
+<span class="sourceLineNo">609</span><a name="line.609"></a>
+<span class="sourceLineNo">610</span>        // Find most local rack per region<a name="line.610"></a>
+<span class="sourceLineNo">611</span>        int rackWithBestLocality = 0;<a name="line.611"></a>
+<span class="sourceLineNo">612</span>        float bestRackLocalityForRegion = 0.0f;<a name="line.612"></a>
+<span class="sourceLineNo">613</span>        for (int rack = 0; rack &lt; numRacks; rack++) {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          float rackLocality = rackLocalities[region][rack];<a name="line.614"></a>
+<span class="sourceLineNo">615</span>          if (rackLocality &gt; bestRackLocalityForRegion) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>            bestRackLocalityForRegion = rackLocality;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            rackWithBestLocality = rack;<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        regionsToMostLocalEntities[LocalityType.RACK.ordinal()][region] = rackWithBestLocality;<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
+<span class="sourceLineNo">624</span><a name="line.624"></a>
+<span class="sourceLineNo">625</span>    /**<a name="line.625"></a>
+<span class="sourceLineNo">626</span>     * Maps region index to rack index<a name="line.626"></a>
+<span class="sourceLineNo">627</span>     */<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    public int getRackForRegion(int region) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>      return serverIndexToRackIndex[regionIndexToServerIndex[region]];<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    }<a name="line.630"></a>
+<span class="sourceLineNo">631</span><a name="line.631"></a>
+<span class="sourceLineNo">632</span>    enum LocalityType {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      SERVER,<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      RACK<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    }<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>    /** An action to move or swap a region */<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    public static class Action {<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      public enum Type {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        ASSIGN_REGION,<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        MOVE_REGION,<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        SWAP_REGIONS,<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        NULL,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      }<a name="line.644"></a>
+<span class="sourceLineNo">645</span><a name="line.645"></a>
+<span class="sourceLineNo">646</span>      public Type type;<a name="line.646"></a>
+<span class="sourceLineNo">647</span>      public Action (Type type) {this.type = type;}<a name="line.647"></a>
+<span class="sourceLineNo">648</span>      /** Returns an Action which would undo this action */<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      public Action undoAction() { return this; }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      @Override<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      public String toString() { return type + ":";}<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    public static class AssignRegionAction extends Action {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      public int region;<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      public int server;<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      public AssignRegionAction(int region, int server) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        super(Type.ASSIGN_REGION);<a name="line.658"></a>
+<span class="sourceLineNo">659</span>        this.region = region;<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        this.server = server;<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      @Override<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      public Action undoAction() {<a name="line.663"></a>
+<span class="sourceLineNo">664</span>        // TODO implement this. This action is not being used by the StochasticLB for now<a name="line.664"></a>
+<span class="sourceLineNo">665</span>        // in case it uses it, we should implement this function.<a name="line.665"></a>
+<span class="sourceLineNo">666</span>        throw new NotImplementedException(HConstants.NOT_IMPLEMENTED);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      }<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      @Override<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      public String toString() {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        return type + ": " + region + ":" + server;<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      }<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    }<a name="line.672"></a>
+<span class="sourceLineNo">673</span><a name="line.673"></a>
+<span class="sourceLineNo">674</span>    public static class MoveRegionAction extends Action {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      public int region;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      public int fromServer;<a name="line.676"></a>
+<span class="sourceLineNo">677</span>      public int toServer;<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>      public MoveRegionAction(int region, int fromServer, int toServer) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        super(Type.MOVE_REGION);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        this.fromServer = fromServer;<a name="line.681"></a>
+<span class="sourceLineNo">682</span>        this.region = region;<a name="line.682"></a>
+<span class="sourceLineNo">683</span>        this.toServer = toServer;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      }<a name="line.684"></a>
+<span class="sourceLineNo">685</span>      @Override<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      public Action undoAction() {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        return new MoveRegionAction (region, toServer, fromServer);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      @Override<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      public String toString() {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>        return type + ": " + region + ":" + fromServer + " -&gt; " + toServer;<a name="line.691"></a>
+<span class="sourceLineNo">692</span>      }<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    }<a name="line.693"></a>
+<span class="sourceLineNo">694</span><a name="line.694"></a>
+<span class="sourceLineNo">695</span>    public static class SwapRegionsAction extends Action {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      public int fromServer;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>      public int fromRegion;<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      public int toServer;<a name="line.698"></a>
+<span class="sourceLineNo">699</span>      public int toRegion;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      public SwapRegionsAction(int fromServer, int fromRegion, int toServer, int toRegion) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span>        super(Type.SWAP_REGIONS);<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        this.fromServer = fromServer;<a name="line.702"></a>
+<span class="sourceLineNo">703</span>        this.fromRegion = fromRegion;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>        this.toServer = toServer;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>        this.toRegion = toRegion;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      }<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      @Override<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      public Action undoAction() {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        return new SwapRegionsAction (fromServer, toRegion, toServer, fromRegion);<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      }<a name="line.710"></a>
+<span class="sourceLineNo">711</span>      @Override<a name="line.711"></a>
+<span class="sourceLineNo">712</span>      public String toString() {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        return type + ": " + fromRegion + ":" + fromServer + " &lt;-&gt; " + toRegion + ":" + toServer;<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      }<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NM_FIELD_NAMING_CONVENTION",<a name="line.717"></a>
+<span class="sourceLineNo">718</span>        justification="Mistake. Too disruptive to change now")<a name="line.718"></a>
+<span class="sourceLineNo">719</span>    public static final Action NullAction = new Action(Type.NULL);<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span>    public void doAction(Action action) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      switch (action.type) {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      case NULL: break;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      case ASSIGN_REGION:<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        // FindBugs: Having the assert quietens FB BC_UNCONFIRMED_CAST warnings<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        assert action instanceof AssignRegionAction: action.getClass();<a name="line.726"></a>
+<span class="sourceLineNo">727</span>        AssignRegionAction ar = (AssignRegionAction) action;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>        regionsPerServer[ar.server] = addRegion(regionsPerServer[ar.server], ar.region);<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        regionMoved(ar.region, -1, ar.server);<a name="line.729"></a>
+<span class="sourceLineNo">730</span>        break;<a name="line.730"></a>
+<span class="sourceLineNo">731</span>      case MOVE_REGION:<a name="line.731"></a>
+<span class="sourceLineNo">732</span>        assert action instanceof MoveRegionAction: action.getClass();<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        MoveRegionAction mra = (MoveRegionAction) action;<a name="line.733"></a>
+<span class="sourceLineNo">734</span>        regionsPerServer[mra.fromServer] = removeRegion(regionsPerServer[mra.fromServer], mra.region);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>        regionsPerServer[mra.toServer] = addRegion(regionsPerServer[mra.toServer], mra.region);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>        regionMoved(mra.region, mra.fromServer, mra.toServer);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>        break;<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      case SWAP_REGIONS:<a name="line.738"></a>
+<span class="sourceLineNo">739</span>        assert action instanceof SwapRegionsAction: action.getClass();<a name="line.739"></a>
+<span class="sourceLineNo">740</span>        SwapRegionsAction a = (SwapRegionsAction) action;<a name="line.740"></a>
+<span class="sourceLineNo">741</span>        regionsPerServer[a.fromServer] = replaceRegion(regionsPerServer[a.fromServer], a.fromRegion, a.toRegion);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>        regionsPerServer[a.toServer] = replaceRegion(regionsPerServer[a.toServer], a.toRegion, a.fromRegion);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        regionMoved(a.fromRegion, a.fromServer, a.toServer);<a name="line.743"></a>
+<span class="sourceLineNo">744</span>        regionMoved(a.toRegion, a.toServer, a.fromServer);<a name="line.744"></a>
+<span class="sourceLineNo">745</span>        break;<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      default:<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        throw new RuntimeException("Uknown action:" + action.type);<a name="line.747"></a>
+<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    }<a name="line.749"></a>
+<span class="sourceLineNo">750</span><a name="line.750"></a>
+<span class="sourceLineNo">751</span>    /**<a name="line.751"></a>
+<span class="sourceLineNo">752</span>     * Return true if the placement of region on server would lower the availability<a name="line.752"></a>
+<span class="sourceLineNo">753</span>     * of the region in question<a name="line.753"></a>
+<span class="sourceLineNo">754</span>     * @return true or false<a name="line.754"></a>
+<span class="sourceLineNo">755</span>     */<a name="line.755"></a>
+<span class="sourceLineNo">756</span>    boolean wouldLowerAvailability(RegionInfo regionInfo, ServerName serverName) {<a name="line.756"></a>
+<span class="sourceLineNo">757</span>      if (!serversToIndex.containsKey(serverName.getAddress())) {<a name="line.757"></a>
+<span class="sourceLineNo">758</span>        return false; // safeguard against race between cluster.servers and servers from LB method args<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      }<a name="line.759"></a>
+<span class="sourceLineNo">760</span>      int server = serversToIndex.get(serverName.getAddress());<a name="line.760"></a>
+<span class="sourceLineNo">761</span>      int region = regionsToIndex.get(regionInfo);<a name="line.761"></a>
+<span class="sourceLineNo">762</span><a name="line.762"></a>
+<span class="sourceLineNo">763</span>      // Region replicas for same region should better assign to different servers<a name="line.763"></a>
+<span class="sourceLineNo">764</span>      for (int i : regionsPerServer[server]) {<a name="line.764"></a>
+<span class="sourceLineNo">765</span>        RegionInfo otherRegionInfo = regions[i];<a name="line.765"></a>
+<span class="sourceLineNo">766</span>        if (RegionReplicaUtil.isReplicasForSameRegion(regionInfo, otherRegionInfo)) {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>          return true;<a name="line.767"></a>
+<span class="sourceLineNo">768</span>        }<a name="line.768"></a>
+<span class="sourceLineNo">769</span>      }<a name="line.769"></a>
+<span class="sourceLineNo">770</span><a name="line.770"></a>
+<span class="sourceLineNo">771</span>      int primary = regionIndexToPrimaryIndex[region];<a name="line.771"></a>
+<span class="sourceLineNo">772</span>      if (primary == -1) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>        return false;<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      }<a name="line.774"></a>
+<span class="sourceLineNo">775</span>      // there is a subset relation for server &lt; host &lt; rack<a name="line.775"></a>
+<span class="sourceLineNo">776</span>      // check server first<a name="line.776"></a>
+<span class="sourceLineNo">777</span>      if (contains(primariesOfRegionsPerServer[server], primary)) {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>        // check for whether there are other servers that we can place this region<a name="line.778"></a>
+<span class="sourceLineNo">779</span>        for (int i = 0; i &lt; primariesOfRegionsPerServer.length; i++) {<a name="line.779"></a>
+<span class="sourceLineNo">780</span>          if (i != server &amp;&amp; !contains(primariesOfRegionsPerServer[i], primary)) {<a name="line.780"></a>
+<span class="sourceLineNo">781</span>            return true; // meaning there is a better server<a name="line.781"></a>
+<span class="sourceLineNo">782</span>          }<a name="line.782"></a>
+<span class="sourceLineNo">783</span>        }<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        return false; // there is not a better server to place this<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>      // check host<a name="line.787"></a>
+<span class="sourceLineNo">788</span>      if (multiServersPerHost) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        // these arrays would only be allocated if we have more than one server per host<a name="line.789"></a>
+<span class="sourceLineNo">790</span>        int host = serverIndexToHostIndex[server];<a name="line.790"></a>
+<span class="sourceLineNo">791</span>        if (contains(primariesOfRegionsPerHost[host], primary)) {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>          // check for whether there are other hosts that we can place this region<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          for (int i = 0; i &lt; primariesOfRegionsPerHost.length; i++) {<a name="line.793"></a>
+<span class="sourceLineNo">794</span>            if (i != host &amp;&amp; !contains(primariesOfRegionsPerHost[i], primary)) {<a name="line.794"></a>
+<span class="sourceLineNo">795</span>              return true; // meaning there is a better host<a name="line.795"></a>
+<span class="sourceLineNo">796</span>            }<a name="line.796"></a>
+<span class="sourceLineNo">797</span>          }<a name="line.797"></a>
+<span class="sourceLineNo">798</span>          return false; // there is not a better host to place this<a name="line.798"></a>
+<span class="sourceLineNo">799</span>        }<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      }<a name="line.800"></a>
+<span class="sourceLineNo">801</span><a name="line.801"></a>
+<span class="sourceLineNo">802</span>      // check rack<a name="line.802"></a>
+<span class="sourceLineNo">803</span>      if (numRacks &gt; 1) {<a name="line.803"></a>
+<span class="sourceLineNo">804</span>        int rack = serverIndexToRackIndex[server];<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        if (contains(primariesOfRegionsPerRack[rack], primary)) {<a name="line.805"></a>
+<span class="sourceLineNo">806</span>          // check for whether there are other racks that we can place this region<a name="line.806"></a>
+<span class="sourceLineNo">807</span>          for (int i = 0; i &lt; primariesOfRegionsPerRack.length; i++) {<a name="line.807"></a>
+<span class="sourceLineNo">808</span>            if (i != rack &amp;&amp; !contains(primariesOfRegionsPerRack[i], primary)) {<a name="line.808"></a>
+<span class="sourceLineNo">809</span>              return true; // meaning there is a better rack<a name="line.809"></a>
+<span class="sourceLineNo">810</span>            }<a name="line.810"></a>
+<span class="sourceLineNo">811</span>          }<a name="line.811"></a>
+<span class="sourceLineNo">812</span>          return false; // there is not a better rack to place this<a name="line.812"></a>
+<span class="sourceLineNo">813</span>        }<a name="line.813"></a>
+<span class="sourceLineNo">814</span>      }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>      return false;<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    }<a name="line.817"></a>
+<span class="sourceLineNo">818</span><a name="line.818"></a>
+<span class="sourceLineNo">819</span>    void doAssignRegion(RegionInfo regionInfo, ServerName serverName) {<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      if (!serversToIndex.containsKey(serverName.getAddress())) {<a name="line.820"></a>
+<span class="sourceLineNo">821</span>        return;<a name="line.821"></a>
+<span class="sourceLineNo">822</span>      }<a name="line.822"></a>
+<span class="sourceLineNo">823</span>      int server = serversToIndex.get(serverName.getAddress());<a name="line.823"></a>
+<span class="sourceLineNo">824</span>      int region = regionsToIndex.get(regionInfo);<a name="line.824"></a>
+<span class="sourceLineNo">825</span>      doAction(new AssignRegionAction(region, server));<a name="line.825"></a>
+<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>    void regionMoved(int region, int oldServer, int newServer) {<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      regionIndexToServerIndex[region] = newServer;<a name="line.829"></a>
+<span class="sourceLineNo">830</span>      if (initialRegionIndexToServerIndex[region] == newServer) {<a name="line.830"></a>
+<span class="sourceLineNo">831</span>        numMovedRegions--; //region moved back to original location<a name="line.831"></a>
+<span class="sourceLineNo">832</span>      } else if (oldServer &gt;= 0 &amp;&amp; initialRegionIndexToServerIndex[region] == oldServer) {<a name="line.832"></a>
+<span class="sourceLineNo">833</span>        numMovedRegions++; //region moved from original location<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      }<a name="line.834"></a>
+<span class="sourceLineNo">835</span>      int tableIndex = regionIndexToTableIndex[region];<a name="line.835"></a>
+<span class="sourceLineNo">836</span>      if (oldServer &gt;= 0) {<a name="line.836"></a>
+<span class="sourceLineNo">837</span>        numRegionsPerServerPerTable[oldServer][tableIndex]--;<a name="line.837"></a>
+<span class="sourceLineNo">838</span>      }<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      numRegionsPerServerPerTable[newServer][tableIndex]++;<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span>      //check whether this caused maxRegionsPerTable in the new Server to be updated<a name="line.841"></a>
+<span class="sourceLineNo">842</span>      if (numRegionsPerServerPerTable[newServer][tableIndex] &gt; numMaxRegionsPerTable[tableIndex]) {<a name="line.842"></a>
+<span class="sourceLineNo">843</span>        numMaxRegionsPerTable[tableIndex] = numRegionsPerServerPerTable[newServer][tableIndex];<a name="line.843"></a>
+<span class="sourceLineNo">844</span>      } else if (oldServer &gt;= 0 &amp;&amp; (numRegionsPerServerPerTable[oldServer][tableIndex] + 1)<a name="line.844"></a>
+<span class="sourceLineNo">845</span>          == numMaxRegionsPerTable[tableIndex]) {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>        //recompute maxRegionsPerTable since the previous value was coming from the old server<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        numMaxRegionsPerTable[tableIndex] = 0;<a name="line.847"></a>
+<span class="sourceLineNo">848</span>        for (int[] aNumRegionsPerServerPerTable : numRegionsPerServerPerTable) {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>          if (aNumRegionsPerServerPerTable[tableIndex] &gt; numMaxRegionsPerTable[tableIndex]) {<a name="line.849"></a>
+<span class="sourceLineNo">850</span>            numMaxRegionsPerTable[tableIndex] = aNumRegionsPerServerPerTable[tableIndex];<a name="line.850"></a>
+<span class="sourceLineNo">851</span>          }<a name="line.851"></a>
+<span class="sourceLineNo">852</span>        }<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      }<a name="line.853"></a>
+<span class="sourceLineNo">854</span><a name="line.854"></a>
+<span class="sourceLineNo">855</span>      // update for servers<a name="line.855"></a>
+<span class="sourceLineNo">856</span>      int primary = regionIndexToPrimaryIndex[region];<a name="line.856"></a>
+<span class="sourceLineNo">857</span>      if (oldServer &gt;= 0) {<a name="line.857"></a>
+<span class="sourceLineNo">858</span>        primariesOfRegionsPerServer[oldServer] = removeRegion(<a name="line.858"></a>
+<span class="sourceLineNo">859</span>          primariesOfRegionsPerServer[oldServer], primary);<a name="line.859"></a>
+<span class="sourceLineNo">860</span>      }<a name="line.860"></a>
+<span class="sourceLineNo">861</span>      primariesOfRegionsPerServer[newServer] = addRegionSorted(<a name="line.861"></a>
+<span class="sourceLineNo">862</span>        primariesOfRegionsPerServer[newServer], primary);<a name="line.862"></a>
+<span class="sourceLineNo">863</span><a name="line.863"></a>
+<span class="sourceLineNo">864</span>      // update for hosts<a name="line.864"></a>
+<span class="sourceLineNo">865</span>      if (multiServersPerHost) {<a name="line.865"></a>
+<span class="sourceLineNo">866</span>        int oldHost = oldServer &gt;= 0 ? serverIndexToHostIndex[oldServer] : -1;<a name="line.866"></a>
+<span class="sourceLineNo">867</span>        int newHost = serverIndexToHostIndex[newServer];<a name="line.867"></a>
+<span class="sourceLineNo">868</span>        if (newHost != oldHost) {<a name="line.868"></a>
+<span class="sourceLineNo">869</span>          regionsPerHost[newHost] = addRegion(regionsPerHost[newHost], region);<a name="line.869"></a>
+<span class="sourceLineNo">870</span>          primariesOfRegionsPerHost[newHost] = addRegionSorted(primariesOfRegionsPerHost[newHost], primary);<a name="line.870"></a>
+<span class="sourceLineNo">871</span>          if (oldHost &gt;= 0) {<a name="line.871"></a>
+<span class="sourceLineNo">872</span>            regionsPerHost[oldHost] = removeRegion(regionsPerHost[oldHost], region);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>            primariesOfRegionsPerHost[oldHost] = removeRegion(<a name="line.873"></a>
+<span class="sourceLineNo">874</span>              primariesOfRegionsPerHost[oldHost], primary); // will still be sorted<a name="line.874"></a>
+<span class="sourceLineNo">875</span>          }<a name="line.875"></a>
+<span class="sourceLineNo">876</span>        }<a name="line.876"></a>
+<span class="sourceLineNo">877</span>      }<a name="line.877"></a>
+<span class="sourceLineNo">878</span><a name="line.878"></a>
+<span class="sourceLineNo">879</span>      // update for racks<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      if (numRacks &gt; 1) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>        int oldRack = oldServer &gt;= 0 ? serverIndexToRackIndex[oldServer] : -1;<a name="line.881"></a>
+<span class="sourceLineNo">882</span>        int newRack = serverIndexToRackIndex[newServer];<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        if (newRack != oldRack) {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>          regionsPerRack[newRack] = addRegion(regionsPerRack[newRack], region);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>          primariesOfRegionsPerRack[newRack] = addRegionSorted(primariesOfRegionsPerRack[newRack], primary);<a name="line.885"></a>
+<span class="sourceLineNo">886</span>          if (oldRack &gt;= 0) {<a name="line.886"></a>
+<span class="sourceLineNo">887</span>            regionsPerRack[oldRack] = removeRegion(regionsPerRack[oldRack], region);<a name="line.887"></a>
+<span class="sourceLineNo">888</span>            primariesOfRegionsPerRack[oldRack] = removeRegion(<a name="line.888"></a>
+<span class="sourceLineNo">889</span>              primariesOfRegionsPerRack[oldRack], primary); // will still be sorted<a name="line.889"></a>
+<span class="sourceLineNo">890</span>          }<a name="line.890"></a>
+<span class="sourceLineNo">891</span>        }<a name="line.891"></a>
+<span class="sourceLineNo">892</span>      }<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    }<a name="line.893"></a>
+<span class="sourceLineNo">894</span><a name="line.894"></a>
+<span class="sourceLineNo">895</span>    int[] removeRegion(int[] regions, int regionIndex) {<a name="line.895"></a>
+<span class="sourceLineNo">896</span>      //TODO: this maybe costly. Consider using linked lists<a name="line.896"></a>
+<span class="sourceLineNo">897</span>      int[] newRegions = new int[regions.length - 1];<a name="line.897"></a>
+<span class="sourceLineNo">898</span>      int i = 0;<a name="line.898"></a>
+<span class="sourceLineNo">899</span>      for (i = 0; i &lt; regions.length; i++) {<a name="line.899"></a>
+<span class="sourceLineNo">900</span>        if (regions[i] == regionIndex) {<a name="line.900"></a>
+<span class="sourceLineNo">901</span>          break;<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        }<a name="line.902"></a>
+<span class="sourceLineNo">903</span>        newRegions[i] = regions[i];<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      }<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      System.arraycopy(regions, i+1, newRegions, i, newRegions.length - i);<a name="line.905"></a>
+<span class="sourceLineNo">906</span>      return newRegions;<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    }<a name="line.907"></a>
+<span class="sourceLineNo">908</span><a name="line.908"></a>
+<span class="sourceLineNo">909</span>    int[] addRegion(int[] regions, int regionIndex) {<a name="line.909"></a>
+<span class="sourceLineNo">910</span>      int[] newRegions = new int[regions.length + 1];<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      System.arraycopy(regions, 0, newRegions, 0, regions.length);<a name="line.911"></a>
+<span class="sourceLineNo">912</span>      newRegions[newRegions.length - 1] = regionIndex;<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      return newRegions;<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>    int[] addRegionSorted(int[] regions, int regionIndex) {<a name="line.916"></a>
+<span class="sourceLineNo">917</span>      int[] newRegions = new int[regions.length + 1];<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      int i = 0;<a name="line.918"></a>
+<span class="sourceLineNo">919</span>      for (i = 0; i &lt; regions.length; i++) { // find the index to insert<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        if (regions[i] &gt; regionIndex) {<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          break;<a name="line.921"></a>
+<span class="sourceLineNo">922</span>        }<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      }<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      System.arraycopy(regions, 0, newRegions, 0, i); // copy first half<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      System.arraycopy(regions, i, newRegions, i+1, regions.length - i); // copy second half<a name="line.925"></a>
+<span class="sourceLineNo">926</span>      newRegions[i] = regionIndex;<a name="line.926"></a>
+<span class="sourceLineNo">927</span><a name="line.927"></a>
+<span class="sourceLineNo">928</span>      return newRegions;<a name="line.928"></a>
+<span class="sourceLineNo">929</span>    }<a name="line.929"></a>
+<span class="sourceLineNo">930</span><a name="line.930"></a>
+<span class="sourceLineNo">931</span>    int[] replaceRegion(int[] regions, int regionIndex, int newRegionIndex) {<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      int i = 0;<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      for (i = 0; i &lt; regions.length; i++) {<a name="line.933"></a>
+<span class="sourceLineNo">934</span>        if (regions[i] == regionIndex) {<a name="line.934"></a>
+<span class="sourceLineNo">935</span>          regions[i] = newRegionIndex;<a name="line.935"></a>
+<span class="sourceLineNo">936</span>          break;<a name="line.936"></a>
+<span class="sourceLineNo">937</span>        }<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      }<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      return regions;<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    }<a name="line.940"></a>
+<span class="sourceLineNo">941</span><a name="line.941"></a>
+<span class="sourceLineNo">942</span>    void sortServersByRegionCount() {<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      Arrays.sort(serverIndicesSortedByRegionCount, numRegionsComparator);<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    }<a name="line.944"></a>
+<span class="sourceLineNo">945</span><a name="line.945"></a>
+<span class="sourceLineNo">946</span>    int getNumRegions(int server) {<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      return regionsPerServer[server].length;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>    }<a name="line.948"></a>
+<span class="sourceLineNo">949</span><a name="line.949"></a>
+<span class="sourceLineNo">950</span>    boolean contains(int[] arr, int val) {<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      return Arrays.binarySearch(arr, val) &gt;= 0;<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    }<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span>    private Comparator&lt;Integer&gt; numRegionsComparator = Comparator.comparingInt(this::getNumRegions);<a name="line.954"></a>
+<span class="sourceLineNo">955</span><a name="line.955"></a>
+<span class="sourceLineNo">956</span>    int getLowestLocalityRegionOnServer(int serverIndex) {<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      if (regionFinder != null) {<a name="line.957"></a>
+<span class="sourceLineNo">958</span>        float lowestLocality = 1.0f;<a name="line.958"></a>
+<span class="sourceLineNo">959</span>        int lowestLocalityRegionIndex = -1;<a name="line.959"></a>
+<span class="sourceLineNo">960</span>        if (regionsPerServer[serverIndex].length == 0) {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>          // No regions on that region server<a name="line.961"></a>
+<span class="sourceLineNo">962</span>          return -1;<a name="line.962"></a>
+<span class="sourceLineNo">963</span>        }<a name="line.963"></a>
+<span class="sourceLineNo">964</span>        for (int j = 0; j &lt; regionsPerServer[serverIndex].length; j++) {<a name="line.964"></a>
+<span class="sourceLineNo">965</span>          int regionIndex = regionsPerServer[serverIndex][j];<a name="line.965"></a>
+<span class="sourceLineNo">966</span>          HDFSBlocksDistribution distribution = regionFinder<a name="line.966"></a>
+<span class="sourceLineNo">967</span>              .getBlockDistribution(regions[regionIndex]);<a name="line.967"></a>
+<span class="sourceLineNo">968</span>          float locality = distribution.getBlockLocalityIndex(servers[serverIndex].getHostname());<a name="line.968"></a>
+<span class="sourceLineNo">969</span>          // skip empty region<a name="line.969"></a>
+<span class="sourceLineNo">970</span>          if (distribution.getUniqueBlocksTotalWeight() == 0) {<a name="line.970"></a>
+<span class="sourceLineNo">971</span>            continue;<a name="line.971"></a>
+<span class="sourceLineNo">972</span>          }<a name="line.972"></a>
+<span class="sourceLineNo">973</span>          if (locality &lt; lowestLocality) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>            lowestLocality = locality;<a name="line.974"></a>
+<span class="sourceLineNo">975</span>            lowestLocalityRegionIndex = j;<a name="line.975"></a>
+<span class="sourceLineNo">976</span>          }<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        }<a name="line.977"></a>
+<span class="sourceLineNo">978</span>        if (lowestLocalityRegionIndex == -1) {<a name="line.978"></a>
+<span class="sourceLineNo">979</span>          return -1;<a name="line.979"></a>
+<span class="sourceLineNo">980</span>        }<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        if (LOG.isTraceEnabled()) {<a name="line.981"></a>
+<span class="sourceLineNo">982</span>          LOG.trace("Lowest locality region is "<a name="line.982"></a>
+<span class="sourceLineNo">983</span>              + regions[regionsPerServer[serverIndex][lowestLocalityRegionIndex]]<a name="line.983"></a>
+<span class="sourceLineNo">984</span>                  .getRegionNameAsString() + " with locality " + lowestLocality<a name="line.984"></a>
+<span class="sourceLineNo">985</span>              + " and its region server contains " + regionsPerServer[serverIndex].length<a name="line.985"></a>
... 39122 lines suppressed ...