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/07/27 14:50:55 UTC

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

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 50b9c3f  Published site at 8c0d7fa5b8971de8bc7062675ba96a6091263776.
50b9c3f is described below

commit 50b9c3ff9972e2c25838209deb5bddff0756a29b
Author: jenkins <bu...@apache.org>
AuthorDate: Mon Jul 27 14:50:38 2020 +0000

    Published site at 8c0d7fa5b8971de8bc7062675ba96a6091263776.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |    2 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/index-all.html                          |    6 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |    4 +-
 .../apache/hadoop/hbase/class-use/ServerName.html  |    4 +-
 .../apache/hadoop/hbase/client/package-tree.html   |   20 +-
 .../hadoop/hbase/coprocessor/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/executor/package-tree.html |    2 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |    6 +-
 .../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 |    8 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |    2 +-
 .../hbase/master/assignment/package-tree.html      |    2 +-
 .../hadoop/hbase/master/balancer/package-tree.html |    2 +-
 .../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      |   14 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    2 +-
 .../hbase/procedure2/store/wal/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |    6 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   18 +-
 .../hbase/regionserver/wal/package-tree.html       |    4 +-
 .../replication/HBaseReplicationEndpoint.html      |    8 +-
 .../HBaseInterClusterReplicationEndpoint.html      |   87 +-
 .../ReplicationSinkManager.SinkPeer.html           |   12 +-
 .../regionserver/ReplicationSinkManager.html       |    4 +-
 .../hadoop/hbase/security/access/package-tree.html |    4 +-
 .../apache/hadoop/hbase/security/package-tree.html |    2 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |    8 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 ...plicationEndpoint.PeerRegionServerListener.html |    4 +-
 .../replication/HBaseReplicationEndpoint.html      |    4 +-
 .../HBaseInterClusterReplicationEndpoint.html      | 1094 ++++++++++----------
 .../ReplicationSinkManager.SinkPeer.html           |   79 +-
 .../regionserver/ReplicationSinkManager.html       |   79 +-
 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 +-
 66 files changed, 801 insertions(+), 772 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index 98aacfe..ae9711e 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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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 fae27d4..d5e1b19 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:20200725143214+00'00')
-/CreationDate (D:20200725144331+00'00')
+/ModDate (D:20200727143409+00'00')
+/CreationDate (D:20200727144706+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index 6375b7c..d9f2cb0 100644
--- a/book.html
+++ b/book.html
@@ -45993,7 +45993,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-07-25 14:32:14 UTC
+Last updated 2020-07-27 14:34:09 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index 357006a..b3e6839 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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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 6f0152e..11f2f15 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -78031,7 +78031,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index 38801a5..ba5e92b 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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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 b4d81ac..80cac6f 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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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 9a0b389..1e5c4c5 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -807,7 +807,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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 0e158b3..1cb4f68 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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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 bc66700..303d319 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1089,7 +1089,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index d75f838..96b497a 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -49509,8 +49509,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#getRegionServers--">getRegionServers()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></dt>
 <dd>
-<div class="block">Get a list of all the addresses of all the region servers
- for this peer cluster</div>
+<div class="block">Get a list of all the addresses of all the available region servers
+ for this peer cluster, or an empty list if no region servers available at peer cluster.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/HasRegionServerServices.html#getRegionServerServices--">getRegionServerServices()</a></span> - Method in interface org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/HasRegionServerServices.html" title="interface in org.apache.hadoop.hbase.coprocessor">HasRegionServerServices</a></dt>
 <dd>
@@ -69633,6 +69633,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html#lastShippedTimeStamps">lastShippedTimeStamps</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#lastSinkFetchTime">lastSinkFetchTime</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HBaseInterClusterReplicationEndpoint</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html#lastState">lastState</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.html" title="class in org.apache.hadoop.hbase.master.assignment">TransitRegionStateProcedure</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#lastStoreFileSize">lastStoreFileSize</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable [...]
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 6c3e96d..bebdb07 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/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/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/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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
index bb97f57..fd43e62 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ServerName.html
@@ -5722,8 +5722,8 @@ service.</div>
 <tr class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">HBaseReplicationEndpoint.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#getRegionServers--">getRegionServers</a></span>()</code>
-<div class="block">Get a list of all the addresses of all the region servers
- for this peer cluster</div>
+<div class="block">Get a list of all the addresses of all the available region servers
+ for this peer cluster, or an empty list if no region servers available at peer cluster.</div>
 </td>
 </tr>
 </tbody>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 895b96c..f4afacc 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -439,23 +439,23 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&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/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/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/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/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/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/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/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/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/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/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/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/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/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/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/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/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/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</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 6b85449..9a728ec 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/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>
+<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>
 </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 880a54a..0192935 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/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>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 01b24a5..4b8070b 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -191,12 +191,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.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/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.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/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/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/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<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/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/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/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 8d9078c..6705ab1 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -140,9 +140,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.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/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>
 </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 0b81e27..3344730 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/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.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/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.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/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/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>
+<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>
 </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 17eaa68..33d69d6 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/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>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index f8add9f..5c89e3f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -151,8 +151,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.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 39196e0..4aadbb8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -199,8 +199,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.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index f250f6d..4b5bd93 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -355,13 +355,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.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/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/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/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/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/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/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/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/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</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 88ab732..b7593ec 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/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/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/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/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/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</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 90a1f01..6a86234 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/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>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 27443e4..02cd8f0 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -429,19 +429,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/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/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/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/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/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/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/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/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/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/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<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/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/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/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/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</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 be5b9cb..9d886ee 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,10 +216,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.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/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/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/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/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 </ul>
 </li>
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 6ee2596..1c9aeb0 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/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/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 c26cda0..78a52f2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -734,20 +734,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/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/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/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/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/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/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/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/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/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index e5b70ea..e12604b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,10 +247,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&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/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
index 00a73ae..542f1e2 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
@@ -282,8 +282,8 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#getRegionServers--">getRegionServers</a></span>()</code>
-<div class="block">Get a list of all the addresses of all the region servers
- for this peer cluster</div>
+<div class="block">Get a list of all the addresses of all the available region servers
+ for this peer cluster, or an empty list if no region servers available at peer cluster.</div>
 </td>
 </tr>
 <tr id="i8" class="altColor">
@@ -624,8 +624,8 @@ implements <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title
 <li class="blockList">
 <h4>getRegionServers</h4>
 <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#line.179">getRegionServers</a>()</pre>
-<div class="block">Get a list of all the addresses of all the region servers
- for this peer cluster</div>
+<div class="block">Get a list of all the addresses of all the available region servers
+ for this peer cluster, or an empty list if no region servers available at peer cluster.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>list of addresses</dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index b723522..a4e9b94 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -228,62 +228,66 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#isSerial">isSerial</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#lastSinkFetchTime">lastSinkFetchTime</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxRetriesMultiplier">maxRetriesMultiplier</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxTerminationWait">maxTerminationWait</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#maxThreads">maxThreads</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSource</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#metrics">metrics</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#peersSelected">peersSelected</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/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#REPLICATION_DROP_ON_DELETED_COLUMN_FAMILY_KEY">REPLICATION_DROP_ON_DELETED_COLUMN_FAMILY_KEY</a></span></code>
 <div class="block">Drop edits for CFs that been deleted from the replication source and target</div>
 </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/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#REPLICATION_DROP_ON_DELETED_TABLE_KEY">REPLICATION_DROP_ON_DELETED_TABLE_KEY</a></span></code>
 <div class="block">Drop edits for tables that been deleted from the replication source and target</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationBulkLoadDataEnabled">replicationBulkLoadDataEnabled</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationClusterId">replicationClusterId</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationRpcLimit">replicationRpcLimit</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#replicationSinkMgr">replicationSinkMgr</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#sleepForRetries">sleepForRetries</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#socketTimeoutMultiplier">socketTimeoutMultiplier</a></span></code>&nbsp;</td>
 </tr>
@@ -714,12 +718,21 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <a name="isSerial">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>isSerial</h4>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.129">isSerial</a></pre>
 </li>
 </ul>
+<a name="lastSinkFetchTime">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>lastSinkFetchTime</h4>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.131">lastSinkFetchTime</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -751,7 +764,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.136">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.138">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -765,7 +778,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>createReplicationSinkManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.146">createReplicationSinkManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="inter [...]
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.148">createReplicationSinkManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="inter [...]
 </li>
 </ul>
 <a name="init-org.apache.hadoop.hbase.replication.ReplicationEndpoint.Context-">
@@ -774,7 +787,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.151">init</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.Context</a>&nbsp;context)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.153">init</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.Context</a>&nbsp;context)
           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.html#init-org.apache.hadoop.hbase.replication.ReplicationEndpoint.Context-">ReplicationEndpoint</a></code></span></div>
 <div class="block">Initialize the replication endpoint with the given context.</div>
@@ -796,7 +809,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>decorateConf</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.204">decorateConf</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.206">decorateConf</a>()</pre>
 </li>
 </ul>
 <a name="connectToPeers--">
@@ -805,7 +818,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>connectToPeers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.211">connectToPeers</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.213">connectToPeers</a>()</pre>
 </li>
 </ul>
 <a name="sleepForRetries-java.lang.String-int-">
@@ -814,7 +827,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.233">sleepForRetries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.235">sleepForRetries</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;msg,
                                   int&nbsp;sleepMultiplier)</pre>
 <div class="block">Do the sleeping logic</div>
 <dl>
@@ -832,7 +845,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>getEstimatedEntrySize</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.248">getEstimatedEntrySize</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;e)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.250">getEstimatedEntrySize</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;e)</pre>
 </li>
 </ul>
 <a name="createParallelBatches-java.util.List-">
@@ -841,7 +854,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>createParallelBatches</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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/ha [...]
+<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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/ha [...]
 </li>
 </ul>
 <a name="createSerialBatches-java.util.List-">
@@ -850,7 +863,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>createSerialBatches</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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/ha [...]
+<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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/ha [...]
 </li>
 </ul>
 <a name="createBatches-java.util.List-">
@@ -859,7 +872,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>createBatches</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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/ha [...]
+<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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/ha [...]
 <div class="block">Divide the entries into multiple batches, so that we can replicate each batch in a thread pool
  concurrently. Note that, for serial replication, we need to make sure that entries from the
  same region to be replicated serially, so entries from the same region consist of a batch, and
@@ -873,7 +886,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>isTableNotFoundException</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.303">isTableNotFoundException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;io)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.305">isTableNotFoundException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;io)</pre>
 <div class="block">Check if there's an <a href="../../../../../../org/apache/hadoop/hbase/TableNotFoundException.html" title="class in org.apache.hadoop.hbase"><code>TableNotFoundException</code></a> in the caused by stacktrace.</div>
 </li>
 </ul>
@@ -883,7 +896,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>isNoSuchColumnFamilyException</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.322">isNoSuchColumnFamilyException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;io)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.324">isNoSuchColumnFamilyException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;io)</pre>
 <div class="block">Check if there's an <a href="../../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver"><code>NoSuchColumnFamilyException</code></a> in the caused by stacktrace.</div>
 </li>
 </ul>
@@ -893,7 +906,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>filterNotExistTableEdits</h4>
-<pre><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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/re [...]
+<pre><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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/re [...]
 </li>
 </ul>
 <a name="filterNotExistColumnFamilyEdits-java.util.List-">
@@ -902,7 +915,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>filterNotExistColumnFamilyEdits</h4>
-<pre><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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/re [...]
+<pre><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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/re [...]
 </li>
 </ul>
 <a name="reconnectToPeerCluster--">
@@ -911,7 +924,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>reconnectToPeerCluster</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.443">reconnectToPeerCluster</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.445">reconnectToPeerCluster</a>()</pre>
 </li>
 </ul>
 <a name="parallelReplicate-java.util.concurrent.CompletionService-org.apache.hadoop.hbase.replication.ReplicationEndpoint.ReplicateContext-java.util.List-">
@@ -920,7 +933,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>parallelReplicate</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.456">parallelReplicate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionService.html?is-external=true" title="class or interface in java.util.concurrent">CompletionService</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interfac [...]
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.458">parallelReplicate</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionService.html?is-external=true" title="class or interface in java.util.concurrent">CompletionService</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interfac [...]
                                <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;replicateContext,
                                <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="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.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&gt;&nbsp;batches)
                         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>
@@ -936,7 +949,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>replicate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.505">replicate</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;replicateContext)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.507">replicate</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.ReplicateContext.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.ReplicateContext</a>&nbsp;replicateContext)</pre>
 <div class="block">Do the shipping logic</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -951,7 +964,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>isPeerEnabled</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.576">isPeerEnabled</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.584">isPeerEnabled</a>()</pre>
 </li>
 </ul>
 <a name="doStop--">
@@ -960,7 +973,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>doStop</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.581">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.589">doStop</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#doStop--">doStop</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint</a></code></dd>
@@ -973,7 +986,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>replicateEntries</h4>
-<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.608">replicateEntries</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>protected&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.616">replicateEntries</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                                int&nbsp;batchIndex,
                                int&nbsp;timeout)
                         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>
@@ -989,7 +1002,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>serialReplicateRegionEntries</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.643">serialReplicateRegionEntries</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.651">serialReplicateRegionEntries</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/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&gt;&nbsp;entries,
                                          int&nbsp;batchIndex,
                                          int&nbsp;timeout)
                                   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>
@@ -1005,7 +1018,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockList">
 <li class="blockList">
 <h4>createReplicator</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</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;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.664">createRepli [...]
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</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;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.672">createRepli [...]
                                              int&nbsp;batchIndex,
                                              int&nbsp;timeout)</pre>
 </li>
@@ -1016,7 +1029,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/HBaseRepl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logPeerId</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.669">logPeerId</a>()</pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html#line.677">logPeerId</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
index 66b0936..8f9651c 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.173">ReplicationSinkManager.SinkPeer</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.176">ReplicationSinkManager.SinkPeer</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">Wraps a replication region server sink to provide the ability to identify
  it.</div>
@@ -212,7 +212,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>private&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/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.174">serverName</a></pre>
+<pre>private&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/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.177">serverName</a></pre>
 </li>
 </ul>
 <a name="regionServer">
@@ -221,7 +221,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionServer</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncRegionServerAdmin.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionServerAdmin</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.175">regionServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncRegionServerAdmin.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionServerAdmin</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.178">regionServer</a></pre>
 </li>
 </ul>
 </li>
@@ -238,7 +238,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SinkPeer</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.177">SinkPeer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.180">SinkPeer</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
                 <a href="../../../../../../org/apache/hadoop/hbase/client/AsyncRegionServerAdmin.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionServerAdmin</a>&nbsp;regionServer)</pre>
 </li>
 </ul>
@@ -256,7 +256,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</h4>
-<pre><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/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.182">getServerName</a>()</pre>
+<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/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.185">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getRegionServer--">
@@ -265,7 +265,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncRegionServerAdmin.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionServerAdmin</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.186">getRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/client/AsyncRegionServerAdmin.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionServerAdmin</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html#line.189">getRegionServer</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
index 76a6d76..2912edb 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
@@ -494,7 +494,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumSinks</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.160">getNumSinks</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.163">getNumSinks</a>()</pre>
 </li>
 </ul>
 <a name="getSinksForTesting--">
@@ -503,7 +503,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSinksForTesting</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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.165">getSinksForTesting</a>()</pre>
+<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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html#line.168">getSinksForTesting</a>()</pre>
 </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 6480924..4110bb8 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/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/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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/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>
 </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 76d4bcb..c060011 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/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
+<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>
 </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 1cc1670..d0028c4 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,9 +211,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.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>
 <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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index a1a75a3..ecfa1de 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -546,15 +546,15 @@
 <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/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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/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.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/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/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/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/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/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.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/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/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index bf48e19..e74aaea 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -196,8 +196,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/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
index 87b9eec..0911bd3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.PeerRegionServerListener.html
@@ -176,8 +176,8 @@
 <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>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Get a list of all the addresses of all the region servers<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * for this peer cluster<a name="line.172"></a>
+<span class="sourceLineNo">171</span>   * Get a list of all the addresses of all the available region servers<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * for this peer cluster, or an empty list if no region servers available at peer cluster.<a name="line.172"></a>
 <span class="sourceLineNo">173</span>   * @return list of addresses<a name="line.173"></a>
 <span class="sourceLineNo">174</span>   */<a name="line.174"></a>
 <span class="sourceLineNo">175</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.175"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
index 87b9eec..0911bd3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html
@@ -176,8 +176,8 @@
 <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>  /**<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * Get a list of all the addresses of all the region servers<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * for this peer cluster<a name="line.172"></a>
+<span class="sourceLineNo">171</span>   * Get a list of all the addresses of all the available region servers<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * for this peer cluster, or an empty list if no region servers available at peer cluster.<a name="line.172"></a>
 <span class="sourceLineNo">173</span>   * @return list of addresses<a name="line.173"></a>
 <span class="sourceLineNo">174</span>   */<a name="line.174"></a>
 <span class="sourceLineNo">175</span>  // Synchronize peer cluster connection attempts to avoid races and rate<a name="line.175"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
index e7553db..5a4689b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.html
@@ -135,550 +135,558 @@
 <span class="sourceLineNo">127</span>  private boolean dropOnDeletedTables;<a name="line.127"></a>
 <span class="sourceLineNo">128</span>  private boolean dropOnDeletedColumnFamilies;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>  private boolean isSerial = false;<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>   * Some implementations of HBaseInterClusterReplicationEndpoint may require instantiate different<a name="line.132"></a>
-<span class="sourceLineNo">133</span>   * Connection implementations, or initialize it in a different way, so defining createConnection<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   * as protected for possible overridings.<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  protected AsyncClusterConnection createConnection(Configuration conf) throws IOException {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf,<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      null, User.getCurrent());<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>  /*<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * Some implementations of HBaseInterClusterReplicationEndpoint may require instantiate different<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * ReplicationSinkManager implementations, or initialize it in a different way,<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * so defining createReplicationSinkManager as protected for possible overridings.<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   */<a name="line.145"></a>
-<span class="sourceLineNo">146</span>  protected ReplicationSinkManager createReplicationSinkManager(AsyncClusterConnection conn) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    return new ReplicationSinkManager(conn, this, this.conf);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>  @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public void init(Context context) throws IOException {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    super.init(context);<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    this.conf = HBaseConfiguration.create(ctx.getConfiguration());<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    decorateConf();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.maxRetriesMultiplier = this.conf.getInt("replication.source.maxretriesmultiplier", 300);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    this.socketTimeoutMultiplier = this.conf.getInt("replication.source.socketTimeoutMultiplier",<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        maxRetriesMultiplier);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    // A Replicator job is bound by the RPC timeout. We will wait this long for all Replicator<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    // tasks to terminate when doStop() is called.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    long maxTerminationWaitMultiplier = this.conf.getLong(<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        "replication.source.maxterminationmultiplier",<a name="line.161"></a>
-<span class="sourceLineNo">162</span>        DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    this.maxTerminationWait = maxTerminationWaitMultiplier *<a name="line.163"></a>
-<span class="sourceLineNo">164</span>        this.conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // TODO: This connection is replication specific or we should make it particular to<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // replication and make replication specific settings such as compression or codec to use<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    // passing Cells.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    this.conn = createConnection(this.conf);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    this.sleepForRetries =<a name="line.169"></a>
-<span class="sourceLineNo">170</span>        this.conf.getLong("replication.source.sleepforretries", 1000);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    this.metrics = context.getMetrics();<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    this.replicationSinkMgr = createReplicationSinkManager(conn);<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    // per sink thread pool<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.maxThreads = this.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.exec = Threads.getBoundedCachedThreadPool(maxThreads, 60, TimeUnit.SECONDS,<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        new ThreadFactoryBuilder().setDaemon(true).setNameFormat("SinkThread-%d").build());<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    this.abortable = ctx.getAbortable();<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // Set the size limit for replication RPCs to 95% of the max request size.<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    // We could do with less slop if we have an accurate estimate of encoded size. Being<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    // conservative for now.<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.replicationRpcLimit = (int)(0.95 * conf.getLong(RpcServer.MAX_REQUEST_SIZE,<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      RpcServer.DEFAULT_MAX_REQUEST_SIZE));<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.dropOnDeletedTables =<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        this.conf.getBoolean(REPLICATION_DROP_ON_DELETED_TABLE_KEY, false);<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    this.dropOnDeletedColumnFamilies = this.conf<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        .getBoolean(REPLICATION_DROP_ON_DELETED_COLUMN_FAMILY_KEY, false);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.replicationBulkLoadDataEnabled =<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (this.replicationBulkLoadDataEnabled) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    }<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // Construct base namespace directory and hfile archive directory path<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    Path rootDir = CommonFSUtils.getRootDir(conf);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    isSerial = context.getPeerConfig().isSerial();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  private void decorateConf() {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<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><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private void connectToPeers() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    getRegionServers();<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    int sleepMultiplier = 1;<a name="line.214"></a>
+<span class="sourceLineNo">130</span>  //Initialising as 0 to guarantee at least one logging message<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  private long lastSinkFetchTime = 0;<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>  /*<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   * Some implementations of HBaseInterClusterReplicationEndpoint may require instantiate different<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   * Connection implementations, or initialize it in a different way, so defining createConnection<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   * as protected for possible overridings.<a name="line.136"></a>
+<span class="sourceLineNo">137</span>   */<a name="line.137"></a>
+<span class="sourceLineNo">138</span>  protected AsyncClusterConnection createConnection(Configuration conf) throws IOException {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    return ClusterConnectionFactory.createAsyncClusterConnection(conf,<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      null, User.getCurrent());<a name="line.140"></a>
+<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /*<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Some implementations of HBaseInterClusterReplicationEndpoint may require instantiate different<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * ReplicationSinkManager implementations, or initialize it in a different way,<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * so defining createReplicationSinkManager as protected for possible overridings.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  protected ReplicationSinkManager createReplicationSinkManager(AsyncClusterConnection conn) {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    return new ReplicationSinkManager(conn, this, this.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>  @Override<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  public void init(Context context) throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    super.init(context);<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    this.conf = HBaseConfiguration.create(ctx.getConfiguration());<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    decorateConf();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    this.maxRetriesMultiplier = this.conf.getInt("replication.source.maxretriesmultiplier", 300);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    this.socketTimeoutMultiplier = this.conf.getInt("replication.source.socketTimeoutMultiplier",<a name="line.158"></a>
+<span class="sourceLineNo">159</span>        maxRetriesMultiplier);<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    // A Replicator job is bound by the RPC timeout. We will wait this long for all Replicator<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    // tasks to terminate when doStop() is called.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    long maxTerminationWaitMultiplier = this.conf.getLong(<a name="line.162"></a>
+<span class="sourceLineNo">163</span>        "replication.source.maxterminationmultiplier",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        DEFAULT_MAX_TERMINATION_WAIT_MULTIPLIER);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.maxTerminationWait = maxTerminationWaitMultiplier *<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        this.conf.getLong(HConstants.HBASE_RPC_TIMEOUT_KEY, HConstants.DEFAULT_HBASE_RPC_TIMEOUT);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    // TODO: This connection is replication specific or we should make it particular to<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    // replication and make replication specific settings such as compression or codec to use<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    // passing Cells.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    this.conn = createConnection(this.conf);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    this.sleepForRetries =<a name="line.171"></a>
+<span class="sourceLineNo">172</span>        this.conf.getLong("replication.source.sleepforretries", 1000);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    this.metrics = context.getMetrics();<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    // ReplicationQueueInfo parses the peerId out of the znode for us<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    this.replicationSinkMgr = createReplicationSinkManager(conn);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    // per sink thread pool<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    this.maxThreads = this.conf.getInt(HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY,<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    this.exec = Threads.getBoundedCachedThreadPool(maxThreads, 60, TimeUnit.SECONDS,<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        new ThreadFactoryBuilder().setDaemon(true).setNameFormat("SinkThread-%d").build());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    this.abortable = ctx.getAbortable();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    // Set the size limit for replication RPCs to 95% of the max request size.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    // We could do with less slop if we have an accurate estimate of encoded size. Being<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    // conservative for now.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    this.replicationRpcLimit = (int)(0.95 * conf.getLong(RpcServer.MAX_REQUEST_SIZE,<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      RpcServer.DEFAULT_MAX_REQUEST_SIZE));<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    this.dropOnDeletedTables =<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        this.conf.getBoolean(REPLICATION_DROP_ON_DELETED_TABLE_KEY, false);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.dropOnDeletedColumnFamilies = this.conf<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        .getBoolean(REPLICATION_DROP_ON_DELETED_COLUMN_FAMILY_KEY, false);<a name="line.190"></a>
+<span class="sourceLineNo">191</span><a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.replicationBulkLoadDataEnabled =<a name="line.192"></a>
+<span class="sourceLineNo">193</span>        conf.getBoolean(HConstants.REPLICATION_BULKLOAD_ENABLE_KEY,<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (this.replicationBulkLoadDataEnabled) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      replicationClusterId = this.conf.get(HConstants.REPLICATION_CLUSTER_ID);<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    // Construct base namespace directory and hfile archive directory path<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    Path rootDir = CommonFSUtils.getRootDir(conf);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    Path baseNSDir = new Path(HConstants.BASE_NAMESPACE_DIR);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    baseNamespaceDir = new Path(rootDir, baseNSDir);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    hfileArchiveDir = new Path(rootDir, new Path(HConstants.HFILE_ARCHIVE_DIRECTORY, baseNSDir));<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    isSerial = context.getPeerConfig().isSerial();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  }<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>  private void decorateConf() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    String replicationCodec = this.conf.get(HConstants.REPLICATION_CODEC_CONF_KEY);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    if (StringUtils.isNotEmpty(replicationCodec)) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      this.conf.set(HConstants.RPC_CODEC_CONF_KEY, replicationCodec);<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  }<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span>  private void connectToPeers() {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    getRegionServers();<a name="line.214"></a>
 <span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    // Connect to peer cluster first, unless we have to stop<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      replicationSinkMgr.chooseSinks();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          sleepMultiplier++;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>  /**<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * Do the sleeping logic<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @param msg Why we sleep<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    try {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      if (LOG.isTraceEnabled()) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        LOG.trace("{} {}, sleeping {} times {}",<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          logPeerId(), msg, sleepForRetries, sleepMultiplier);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    } catch (InterruptedException e) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      if (LOG.isDebugEnabled()) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        LOG.debug("{} Interrupted while sleeping between retries", logPeerId());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      }<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  }<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span>  private int getEstimatedEntrySize(Entry e) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    long size = e.getKey().estimatedSerializedSizeOf() + e.getEdit().estimatedSerializedSizeOf();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return (int) size;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  private List&lt;List&lt;Entry&gt;&gt; createParallelBatches(final List&lt;Entry&gt; entries) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    int numSinks = Math.max(replicationSinkMgr.getNumSinks(), 1);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    int n = Math.min(Math.min(this.maxThreads, entries.size() / 100 + 1), numSinks);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    List&lt;List&lt;Entry&gt;&gt; entryLists =<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        Stream.generate(ArrayList&lt;Entry&gt;::new).limit(n).collect(Collectors.toList());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    int[] sizes = new int[n];<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    for (Entry e : entries) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      int index = Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName()) % n);<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      int entrySize = getEstimatedEntrySize(e);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      // If this batch has at least one entry and is over sized, move it to the tail of list and<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      // initialize the entryLists[index] to be a empty list.<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      if (sizes[index] &gt; 0 &amp;&amp; sizes[index] + entrySize &gt; replicationRpcLimit) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        entryLists.add(entryLists.get(index));<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        entryLists.set(index, new ArrayList&lt;&gt;());<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        sizes[index] = 0;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      entryLists.get(index).add(e);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      sizes[index] += entrySize;<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return entryLists;<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  private List&lt;List&lt;Entry&gt;&gt; createSerialBatches(final List&lt;Entry&gt; entries) {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    Map&lt;byte[], List&lt;Entry&gt;&gt; regionEntries = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    for (Entry e : entries) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      regionEntries.computeIfAbsent(e.getKey().getEncodedRegionName(), key -&gt; new ArrayList&lt;&gt;())<a name="line.278"></a>
-<span class="sourceLineNo">279</span>          .add(e);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    return new ArrayList&lt;&gt;(regionEntries.values());<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  }<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span>  /**<a name="line.284"></a>
-<span class="sourceLineNo">285</span>   * Divide the entries into multiple batches, so that we can replicate each batch in a thread pool<a name="line.285"></a>
-<span class="sourceLineNo">286</span>   * concurrently. Note that, for serial replication, we need to make sure that entries from the<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * same region to be replicated serially, so entries from the same region consist of a batch, and<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * we will divide a batch into several batches by replicationRpcLimit in method<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   * serialReplicateRegionEntries()<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  private List&lt;List&lt;Entry&gt;&gt; createBatches(final List&lt;Entry&gt; entries) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    if (isSerial) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      return createSerialBatches(entries);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    } else {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      return createParallelBatches(entries);<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  }<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>  /**<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * Check if there's an {@link TableNotFoundException} in the caused by stacktrace.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  @VisibleForTesting<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  public static boolean isTableNotFoundException(Throwable io) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    if (io instanceof RemoteException) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      io = ((RemoteException) io).unwrapRemoteException();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    if (io != null &amp;&amp; io.getMessage().contains("TableNotFoundException")) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      return true;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    for (; io != null; io = io.getCause()) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      if (io instanceof TableNotFoundException) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>        return true;<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>    return false;<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>   * Check if there's an {@link NoSuchColumnFamilyException} in the caused by stacktrace.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   */<a name="line.320"></a>
-<span class="sourceLineNo">321</span>  @VisibleForTesting<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  public static boolean isNoSuchColumnFamilyException(Throwable io) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    if (io instanceof RemoteException) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>      io = ((RemoteException) io).unwrapRemoteException();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    }<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (io != null &amp;&amp; io.getMessage().contains("NoSuchColumnFamilyException")) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return true;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    for (; io != null; io = io.getCause()) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>      if (io instanceof NoSuchColumnFamilyException) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        return true;<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>    return false;<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>  @VisibleForTesting<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  List&lt;List&lt;Entry&gt;&gt; filterNotExistTableEdits(final List&lt;List&lt;Entry&gt;&gt; oldEntryList) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    List&lt;List&lt;Entry&gt;&gt; entryList = new ArrayList&lt;&gt;();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    Map&lt;TableName, Boolean&gt; existMap = new HashMap&lt;&gt;();<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    try (Connection localConn = ConnectionFactory.createConnection(ctx.getLocalConfiguration());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>         Admin localAdmin = localConn.getAdmin()) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      for (List&lt;Entry&gt; oldEntries : oldEntryList) {<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        List&lt;Entry&gt; entries = new ArrayList&lt;&gt;();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        for (Entry e : oldEntries) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>          TableName tableName = e.getKey().getTableName();<a name="line.346"></a>
-<span class="sourceLineNo">347</span>          boolean exist = true;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>          if (existMap.containsKey(tableName)) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            exist = existMap.get(tableName);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          } else {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>            try {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>              exist = localAdmin.tableExists(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>              existMap.put(tableName, exist);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>            } catch (IOException iox) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>              LOG.warn("Exception checking for local table " + tableName, iox);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>              // we can't drop edits without full assurance, so we assume table exists.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>              exist = true;<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>          if (exist) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>            entries.add(e);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          } else {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>            // Would potentially be better to retry in one of the outer loops<a name="line.363"></a>
-<span class="sourceLineNo">364</span>            // and add a table filter there; but that would break the encapsulation,<a name="line.364"></a>
-<span class="sourceLineNo">365</span>            // so we're doing the filtering here.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>            LOG.warn("Missing table detected at sink, local table also does not exist, "<a name="line.366"></a>
-<span class="sourceLineNo">367</span>                + "filtering edits for table '{}'", tableName);<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>        if (!entries.isEmpty()) {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          entryList.add(entries);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        }<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    } catch (IOException iox) {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      LOG.warn("Exception when creating connection to check local table", iox);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return oldEntryList;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    return entryList;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
-<span class="sourceLineNo">380</span><a name="line.380"></a>
-<span class="sourceLineNo">381</span>  @VisibleForTesting<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  List&lt;List&lt;Entry&gt;&gt; filterNotExistColumnFamilyEdits(final List&lt;List&lt;Entry&gt;&gt; oldEntryList) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    List&lt;List&lt;Entry&gt;&gt; entryList = new ArrayList&lt;&gt;();<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    Map&lt;TableName, Set&lt;String&gt;&gt; existColumnFamilyMap = new HashMap&lt;&gt;();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    try (Connection localConn = ConnectionFactory.createConnection(ctx.getLocalConfiguration());<a name="line.385"></a>
-<span class="sourceLineNo">386</span>         Admin localAdmin = localConn.getAdmin()) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      for (List&lt;Entry&gt; oldEntries : oldEntryList) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        List&lt;Entry&gt; entries = new ArrayList&lt;&gt;();<a name="line.388"></a>
-<span class="sourceLineNo">389</span>        for (Entry e : oldEntries) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          TableName tableName = e.getKey().getTableName();<a name="line.390"></a>
-<span class="sourceLineNo">391</span>          if (!existColumnFamilyMap.containsKey(tableName)) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>            try {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>              Set&lt;String&gt; cfs = localAdmin.getDescriptor(tableName).getColumnFamilyNames().stream()<a name="line.393"></a>
-<span class="sourceLineNo">394</span>                  .map(Bytes::toString).collect(Collectors.toSet());<a name="line.394"></a>
-<span class="sourceLineNo">395</span>              existColumnFamilyMap.put(tableName, cfs);<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            } catch (Exception ex) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>              LOG.warn("Exception getting cf names for local table {}", tableName, ex);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>              // if catch any exception, we are not sure about table's description,<a name="line.398"></a>
-<span class="sourceLineNo">399</span>              // so replicate raw entry<a name="line.399"></a>
-<span class="sourceLineNo">400</span>              entries.add(e);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>              continue;<a name="line.401"></a>
-<span class="sourceLineNo">402</span>            }<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>          Set&lt;String&gt; existColumnFamilies = existColumnFamilyMap.get(tableName);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>          Set&lt;String&gt; missingCFs = new HashSet&lt;&gt;();<a name="line.406"></a>
-<span class="sourceLineNo">407</span>          WALEdit walEdit = new WALEdit();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>          walEdit.getCells().addAll(e.getEdit().getCells());<a name="line.408"></a>
-<span class="sourceLineNo">409</span>          WALUtil.filterCells(walEdit, cell -&gt; {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>            String cf = Bytes.toString(CellUtil.cloneFamily(cell));<a name="line.410"></a>
-<span class="sourceLineNo">411</span>            if (existColumnFamilies.contains(cf)) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>              return cell;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>            } else {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>              missingCFs.add(cf);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>              return null;<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 (!walEdit.isEmpty()) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>            Entry newEntry = new Entry(e.getKey(), walEdit);<a name="line.419"></a>
-<span class="sourceLineNo">420</span>            entries.add(newEntry);<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>          if (!missingCFs.isEmpty()) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>            // Would potentially be better to retry in one of the outer loops<a name="line.424"></a>
-<span class="sourceLineNo">425</span>            // and add a table filter there; but that would break the encapsulation,<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            // so we're doing the filtering here.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            LOG.warn(<a name="line.427"></a>
-<span class="sourceLineNo">428</span>                "Missing column family detected at sink, local column family also does not exist,"<a name="line.428"></a>
-<span class="sourceLineNo">429</span>                    + " filtering edits for table '{}',column family '{}'", tableName, missingCFs);<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>        if (!entries.isEmpty()) {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          entryList.add(entries);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        }<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    } catch (IOException iox) {<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      LOG.warn("Exception when creating connection to check local table", iox);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      return oldEntryList;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    return entryList;<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>  private void reconnectToPeerCluster() {<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    AsyncClusterConnection connection = null;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    try {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      connection =<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, null, User.getCurrent());<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    } catch (IOException ioe) {<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      LOG.warn("{} Failed to create connection for peer cluster", logPeerId(), ioe);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (connection != null) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      this.conn = connection;<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    }<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  }<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  private long parallelReplicate(CompletionService&lt;Integer&gt; pool, ReplicateContext replicateContext,<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      List&lt;List&lt;Entry&gt;&gt; batches) throws IOException {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    int futures = 0;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    for (int i = 0; i &lt; batches.size(); i++) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      List&lt;Entry&gt; entries = batches.get(i);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      if (!entries.isEmpty()) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>        if (LOG.isTraceEnabled()) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>          LOG.trace("{} Submitting {} entries of total size {}", logPeerId(), entries.size(),<a name="line.463"></a>
-<span class="sourceLineNo">464</span>            replicateContext.getSize());<a name="line.464"></a>
-<span class="sourceLineNo">465</span>        }<a name="line.465"></a>
-<span class="sourceLineNo">466</span>        // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.466"></a>
-<span class="sourceLineNo">467</span>        pool.submit(createReplicator(entries, i, replicateContext.getTimeout()));<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        futures++;<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><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    IOException iox = null;<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    long lastWriteTime = 0;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    for (int i = 0; i &lt; futures; i++) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      try {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        // wait for all futures, remove successful parts<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        // (only the remaining parts will be retried)<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        Future&lt;Integer&gt; f = pool.take();<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        int index = f.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        List&lt;Entry&gt; batch = batches.get(index);<a name="line.480"></a>
-<span class="sourceLineNo">481</span>        batches.set(index, Collections.emptyList()); // remove successful batch<a name="line.481"></a>
-<span class="sourceLineNo">482</span>        // Find the most recent write time in the batch<a name="line.482"></a>
-<span class="sourceLineNo">483</span>        long writeTime = batch.get(batch.size() - 1).getKey().getWriteTime();<a name="line.483"></a>
-<span class="sourceLineNo">484</span>        if (writeTime &gt; lastWriteTime) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>          lastWriteTime = writeTime;<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        }<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } catch (InterruptedException ie) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        iox = new IOException(ie);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      } catch (ExecutionException ee) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>        iox = ee.getCause() instanceof IOException?<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          (IOException)ee.getCause(): new IOException(ee.getCause());<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    }<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    if (iox != null) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      // if we had any exceptions, try again<a name="line.495"></a>
-<span class="sourceLineNo">496</span>      throw iox;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    return lastWriteTime;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>  }<a name="line.499"></a>
-<span class="sourceLineNo">500</span><a name="line.500"></a>
-<span class="sourceLineNo">501</span>  /**<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * Do the shipping logic<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   */<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  public boolean replicate(ReplicateContext replicateContext) {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    CompletionService&lt;Integer&gt; pool = new ExecutorCompletionService&lt;&gt;(this.exec);<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    int sleepMultiplier = 1;<a name="line.507"></a>
-<span class="sourceLineNo">508</span><a name="line.508"></a>
-<span class="sourceLineNo">509</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      connectToPeers();<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      peersSelected = true;<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>    int numSinks = replicationSinkMgr.getNumSinks();<a name="line.514"></a>
-<span class="sourceLineNo">515</span>    if (numSinks == 0) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      LOG.warn("{} No replication sinks found, returning without replicating. "<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        + "The source should retry with the same set of edits.", logPeerId());<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      return false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span>    List&lt;List&lt;Entry&gt;&gt; batches = createBatches(replicateContext.getEntries());<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    while (this.isRunning() &amp;&amp; !exec.isShutdown()) {<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      if (!isPeerEnabled()) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>          sleepMultiplier++;<a name="line.525"></a>
-<span class="sourceLineNo">526</span>        }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        continue;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      if (this.conn == null) {<a name="line.529"></a>
-<span class="sourceLineNo">530</span>        reconnectToPeerCluster();<a name="line.530"></a>
-<span class="sourceLineNo">531</span>      }<a name="line.531"></a>
-<span class="sourceLineNo">532</span>      try {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>        // replicate the batches to sink side.<a name="line.533"></a>
-<span class="sourceLineNo">534</span>        parallelReplicate(pool, replicateContext, batches);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        return true;<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException ioe) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        if (dropOnDeletedTables &amp;&amp; isTableNotFoundException(ioe)) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          // Only filter the edits to replicate and don't change the entries in replicateContext<a name="line.538"></a>
-<span class="sourceLineNo">539</span>          // as the upper layer rely on it.<a name="line.539"></a>
-<span class="sourceLineNo">540</span>          batches = filterNotExistTableEdits(batches);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>          if (batches.isEmpty()) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>            LOG.warn("After filter not exist table's edits, 0 edits to replicate, just return");<a name="line.542"></a>
-<span class="sourceLineNo">543</span>            return true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>          }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>        } else if (dropOnDeletedColumnFamilies &amp;&amp; isNoSuchColumnFamilyException(ioe)) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>          batches = filterNotExistColumnFamilyEdits(batches);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>          if (batches.isEmpty()) {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>            LOG.warn(<a name="line.548"></a>
-<span class="sourceLineNo">549</span>                "After filter not exist column family's edits, 0 edits to replicate, just return");<a name="line.549"></a>
-<span class="sourceLineNo">550</span>            return true;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>          }<a name="line.551"></a>
-<span class="sourceLineNo">552</span>        } else {<a name="line.552"></a>
-<span class="sourceLineNo">553</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>            // This exception means we waited for more than 60s and nothing<a name="line.554"></a>
-<span class="sourceLineNo">555</span>            // happened, the cluster is alive and calling it right away<a name="line.555"></a>
-<span class="sourceLineNo">556</span>            // even for a test just makes things worse.<a name="line.556"></a>
-<span class="sourceLineNo">557</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.557"></a>
-<span class="sourceLineNo">558</span>                  "call to the remote cluster timed out, which is usually " +<a name="line.558"></a>
-<span class="sourceLineNo">559</span>                  "caused by a machine failure or a massive slowdown",<a name="line.559"></a>
-<span class="sourceLineNo">560</span>              this.socketTimeoutMultiplier);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>          } else if (ioe instanceof ConnectException || ioe instanceof UnknownHostException) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>            LOG.warn("{} Peer is unavailable, rechecking all sinks: ", logPeerId(), ioe);<a name="line.562"></a>
-<span class="sourceLineNo">563</span>            replicationSinkMgr.chooseSinks();<a name="line.563"></a>
-<span class="sourceLineNo">564</span>          } else {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>            LOG.warn("{} Can't replicate because of a local or network error: ", logPeerId(), ioe);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>          }<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span>          sleepMultiplier++;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        }<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      }<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    }<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    return false; // in case we exited before replicating<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
-<span class="sourceLineNo">575</span><a name="line.575"></a>
-<span class="sourceLineNo">576</span>  protected boolean isPeerEnabled() {<a name="line.576"></a>
-<span class="sourceLineNo">577</span>    return ctx.getReplicationPeer().isPeerEnabled();<a name="line.577"></a>
-<span class="sourceLineNo">578</span>  }<a name="line.578"></a>
-<span class="sourceLineNo">579</span><a name="line.579"></a>
-<span class="sourceLineNo">580</span>  @Override<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  protected void doStop() {<a name="line.581"></a>
-<span class="sourceLineNo">582</span>    disconnect(); // don't call super.doStop()<a name="line.582"></a>
-<span class="sourceLineNo">583</span>    if (this.conn != null) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      try {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        this.conn.close();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>        this.conn = null;<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      } catch (IOException e) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        LOG.warn("{} Failed to close the connection", logPeerId());<a name="line.588"></a>
-<span class="sourceLineNo">589</span>      }<a name="line.589"></a>
-<span class="sourceLineNo">590</span>    }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    // Allow currently running replication tasks to finish<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    exec.shutdown();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    try {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      exec.awaitTermination(maxTerminationWait, TimeUnit.MILLISECONDS);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>    } catch (InterruptedException e) {<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span>    // Abort if the tasks did not terminate in time<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    if (!exec.isTerminated()) {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>      String errMsg = "HBaseInterClusterReplicationEndpoint termination failed. The " +<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          "ThreadPoolExecutor failed to finish all tasks within " + maxTerminationWait + "ms. " +<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          "Aborting to prevent Replication from deadlocking. See HBASE-16081.";<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      abortable.abort(errMsg, new IOException(errMsg));<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    }<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    notifyStopped();<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>  @VisibleForTesting<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  protected int replicateEntries(List&lt;Entry&gt; entries, int batchIndex, int timeout)<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      throws IOException {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    SinkPeer sinkPeer = null;<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    try {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      int entriesHashCode = System.identityHashCode(entries);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      if (LOG.isTraceEnabled()) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        long size = entries.stream().mapToLong(this::getEstimatedEntrySize).sum();<a name="line.614"></a>
-<span class="sourceLineNo">615</span>        LOG.trace("{} Replicating batch {} of {} entries with total size {} bytes to {}",<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          logPeerId(), entriesHashCode, entries.size(), size, replicationClusterId);<a name="line.616"></a>
-<span class="sourceLineNo">617</span>      }<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>      AsyncRegionServerAdmin rsAdmin = sinkPeer.getRegionServer();<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      try {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        ReplicationProtbufUtil.replicateWALEntry(rsAdmin,<a name="line.621"></a>
-<span class="sourceLineNo">622</span>          entries.toArray(new Entry[entries.size()]), replicationClusterId, baseNamespaceDir,<a name="line.622"></a>
-<span class="sourceLineNo">623</span>          hfileArchiveDir, timeout);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        if (LOG.isTraceEnabled()) {<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          LOG.trace("{} Completed replicating batch {}", logPeerId(), entriesHashCode);<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        }<a name="line.626"></a>
-<span class="sourceLineNo">627</span>      } catch (IOException e) {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        if (LOG.isTraceEnabled()) {<a name="line.628"></a>
-<span class="sourceLineNo">629</span>          LOG.trace("{} Failed replicating batch {}", logPeerId(), entriesHashCode, e);<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        }<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        throw e;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      }<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    } catch (IOException ioe) {<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      if (sinkPeer != null) {<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      }<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      throw ioe;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    return batchIndex;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>  }<a name="line.641"></a>
-<span class="sourceLineNo">642</span><a name="line.642"></a>
-<span class="sourceLineNo">643</span>  private int serialReplicateRegionEntries(List&lt;Entry&gt; entries, int batchIndex, int timeout)<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      throws IOException {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    int batchSize = 0, index = 0;<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    List&lt;Entry&gt; batch = new ArrayList&lt;&gt;();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>    for (Entry entry : entries) {<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      int entrySize = getEstimatedEntrySize(entry);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (batchSize &gt; 0 &amp;&amp; batchSize + entrySize &gt; replicationRpcLimit) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        replicateEntries(batch, index++, timeout);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        batch.clear();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>        batchSize = 0;<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>      batch.add(entry);<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      batchSize += entrySize;<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    if (batchSize &gt; 0) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      replicateEntries(batch, index, timeout);<a name="line.658"></a>
-<span class="sourceLineNo">659</span>    }<a name="line.659"></a>
-<span class="sourceLineNo">660</span>    return batchIndex;<a name="line.660"></a>
-<span class="sourceLineNo">661</span>  }<a name="line.661"></a>
-<span class="sourceLineNo">662</span><a name="line.662"></a>
-<span class="sourceLineNo">663</span>  @VisibleForTesting<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  protected Callable&lt;Integer&gt; createReplicator(List&lt;Entry&gt; entries, int batchIndex, int timeout) {<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    return isSerial ? () -&gt; serialReplicateRegionEntries(entries, batchIndex, timeout)<a name="line.665"></a>
-<span class="sourceLineNo">666</span>        : () -&gt; replicateEntries(entries, batchIndex, timeout);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>  }<a name="line.667"></a>
-<span class="sourceLineNo">668</span><a name="line.668"></a>
-<span class="sourceLineNo">669</span>  private String logPeerId(){<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    return "[Source for peer " + this.ctx.getPeerId() + "]:";<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">216</span>    int sleepMultiplier = 1;<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span>    // Connect to peer cluster first, unless we have to stop<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    while (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      replicationSinkMgr.chooseSinks();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      if (this.isRunning() &amp;&amp; replicationSinkMgr.getNumSinks() == 0) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        if (sleepForRetries("Waiting for peers", sleepMultiplier)) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          sleepMultiplier++;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  }<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>  /**<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * Do the sleeping logic<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param msg Why we sleep<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param sleepMultiplier by how many times the default sleeping time is augmented<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @return True if &lt;code&gt;sleepMultiplier&lt;/code&gt; is &amp;lt; &lt;code&gt;maxRetriesMultiplier&lt;/code&gt;<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  protected boolean sleepForRetries(String msg, int sleepMultiplier) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    try {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      if (LOG.isTraceEnabled()) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>        LOG.trace("{} {}, sleeping {} times {}",<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          logPeerId(), msg, sleepForRetries, sleepMultiplier);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      Thread.sleep(this.sleepForRetries * sleepMultiplier);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    } catch (InterruptedException e) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (LOG.isDebugEnabled()) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        LOG.debug("{} Interrupted while sleeping between retries", logPeerId());<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>    return sleepMultiplier &lt; maxRetriesMultiplier;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>  private int getEstimatedEntrySize(Entry e) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    long size = e.getKey().estimatedSerializedSizeOf() + e.getEdit().estimatedSerializedSizeOf();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return (int) size;<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>  private List&lt;List&lt;Entry&gt;&gt; createParallelBatches(final List&lt;Entry&gt; entries) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    int numSinks = Math.max(replicationSinkMgr.getNumSinks(), 1);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    int n = Math.min(Math.min(this.maxThreads, entries.size() / 100 + 1), numSinks);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    List&lt;List&lt;Entry&gt;&gt; entryLists =<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        Stream.generate(ArrayList&lt;Entry&gt;::new).limit(n).collect(Collectors.toList());<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    int[] sizes = new int[n];<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    for (Entry e : entries) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      int index = Math.abs(Bytes.hashCode(e.getKey().getEncodedRegionName()) % n);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      int entrySize = getEstimatedEntrySize(e);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      // If this batch has at least one entry and is over sized, move it to the tail of list and<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      // initialize the entryLists[index] to be a empty list.<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      if (sizes[index] &gt; 0 &amp;&amp; sizes[index] + entrySize &gt; replicationRpcLimit) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        entryLists.add(entryLists.get(index));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        entryLists.set(index, new ArrayList&lt;&gt;());<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        sizes[index] = 0;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      entryLists.get(index).add(e);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      sizes[index] += entrySize;<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    return entryLists;<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>  private List&lt;List&lt;Entry&gt;&gt; createSerialBatches(final List&lt;Entry&gt; entries) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    Map&lt;byte[], List&lt;Entry&gt;&gt; regionEntries = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    for (Entry e : entries) {<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      regionEntries.computeIfAbsent(e.getKey().getEncodedRegionName(), key -&gt; new ArrayList&lt;&gt;())<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          .add(e);<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return new ArrayList&lt;&gt;(regionEntries.values());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  }<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
+<span class="sourceLineNo">287</span>   * Divide the entries into multiple batches, so that we can replicate each batch in a thread pool<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   * concurrently. Note that, for serial replication, we need to make sure that entries from the<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   * same region to be replicated serially, so entries from the same region consist of a batch, and<a name="line.289"></a>
+<span class="sourceLineNo">290</span>   * we will divide a batch into several batches by replicationRpcLimit in method<a name="line.290"></a>
+<span class="sourceLineNo">291</span>   * serialReplicateRegionEntries()<a name="line.291"></a>
+<span class="sourceLineNo">292</span>   */<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  private List&lt;List&lt;Entry&gt;&gt; createBatches(final List&lt;Entry&gt; entries) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    if (isSerial) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      return createSerialBatches(entries);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    } else {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      return createParallelBatches(entries);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    }<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>  /**<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * Check if there's an {@link TableNotFoundException} in the caused by stacktrace.<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @VisibleForTesting<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public static boolean isTableNotFoundException(Throwable io) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    if (io instanceof RemoteException) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      io = ((RemoteException) io).unwrapRemoteException();<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    if (io != null &amp;&amp; io.getMessage().contains("TableNotFoundException")) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      return true;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    for (; io != null; io = io.getCause()) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      if (io instanceof TableNotFoundException) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        return true;<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>    return false;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Check if there's an {@link NoSuchColumnFamilyException} in the caused by stacktrace.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  @VisibleForTesting<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  public static boolean isNoSuchColumnFamilyException(Throwable io) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    if (io instanceof RemoteException) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      io = ((RemoteException) io).unwrapRemoteException();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    }<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    if (io != null &amp;&amp; io.getMessage().contains("NoSuchColumnFamilyException")) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      return true;<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    }<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    for (; io != null; io = io.getCause()) {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      if (io instanceof NoSuchColumnFamilyException) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>        return true;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return false;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>  @VisibleForTesting<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  List&lt;List&lt;Entry&gt;&gt; filterNotExistTableEdits(final List&lt;List&lt;Entry&gt;&gt; oldEntryList) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    List&lt;List&lt;Entry&gt;&gt; entryList = new ArrayList&lt;&gt;();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    Map&lt;TableName, Boolean&gt; existMap = new HashMap&lt;&gt;();<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    try (Connection localConn = ConnectionFactory.createConnection(ctx.getLocalConfiguration());<a name="line.343"></a>
+<span class="sourceLineNo">344</span>         Admin localAdmin = localConn.getAdmin()) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      for (List&lt;Entry&gt; oldEntries : oldEntryList) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>        List&lt;Entry&gt; entries = new ArrayList&lt;&gt;();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        for (Entry e : oldEntries) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>          TableName tableName = e.getKey().getTableName();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>          boolean exist = true;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          if (existMap.containsKey(tableName)) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>            exist = existMap.get(tableName);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          } else {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            try {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>              exist = localAdmin.tableExists(tableName);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>              existMap.put(tableName, exist);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>            } catch (IOException iox) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>              LOG.warn("Exception checking for local table " + tableName, iox);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>              // we can't drop edits without full assurance, so we assume table exists.<a name="line.358"></a>
+<span class="sourceLineNo">359</span>              exist = true;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>            }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>          }<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          if (exist) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>            entries.add(e);<a name="line.363"></a>
+<span class="sourceLineNo">364</span>          } else {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>            // Would potentially be better to retry in one of the outer loops<a name="line.365"></a>
+<span class="sourceLineNo">366</span>            // and add a table filter there; but that would break the encapsulation,<a name="line.366"></a>
+<span class="sourceLineNo">367</span>            // so we're doing the filtering here.<a name="line.367"></a>
+<span class="sourceLineNo">368</span>            LOG.warn("Missing table detected at sink, local table also does not exist, "<a name="line.368"></a>
+<span class="sourceLineNo">369</span>                + "filtering edits for table '{}'", tableName);<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>        if (!entries.isEmpty()) {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>          entryList.add(entries);<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>    } catch (IOException iox) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      LOG.warn("Exception when creating connection to check local table", iox);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      return oldEntryList;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    return entryList;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  List&lt;List&lt;Entry&gt;&gt; filterNotExistColumnFamilyEdits(final List&lt;List&lt;Entry&gt;&gt; oldEntryList) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    List&lt;List&lt;Entry&gt;&gt; entryList = new ArrayList&lt;&gt;();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    Map&lt;TableName, Set&lt;String&gt;&gt; existColumnFamilyMap = new HashMap&lt;&gt;();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    try (Connection localConn = ConnectionFactory.createConnection(ctx.getLocalConfiguration());<a name="line.387"></a>
+<span class="sourceLineNo">388</span>         Admin localAdmin = localConn.getAdmin()) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      for (List&lt;Entry&gt; oldEntries : oldEntryList) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        List&lt;Entry&gt; entries = new ArrayList&lt;&gt;();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>        for (Entry e : oldEntries) {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          TableName tableName = e.getKey().getTableName();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>          if (!existColumnFamilyMap.containsKey(tableName)) {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>            try {<a name="line.394"></a>
+<span class="sourceLineNo">395</span>              Set&lt;String&gt; cfs = localAdmin.getDescriptor(tableName).getColumnFamilyNames().stream()<a name="line.395"></a>
+<span class="sourceLineNo">396</span>                  .map(Bytes::toString).collect(Collectors.toSet());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>              existColumnFamilyMap.put(tableName, cfs);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>            } catch (Exception ex) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>              LOG.warn("Exception getting cf names for local table {}", tableName, ex);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>              // if catch any exception, we are not sure about table's description,<a name="line.400"></a>
+<span class="sourceLineNo">401</span>              // so replicate raw entry<a name="line.401"></a>
+<span class="sourceLineNo">402</span>              entries.add(e);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>              continue;<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><a name="line.406"></a>
+<span class="sourceLineNo">407</span>          Set&lt;String&gt; existColumnFamilies = existColumnFamilyMap.get(tableName);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>          Set&lt;String&gt; missingCFs = new HashSet&lt;&gt;();<a name="line.408"></a>
+<span class="sourceLineNo">409</span>          WALEdit walEdit = new WALEdit();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>          walEdit.getCells().addAll(e.getEdit().getCells());<a name="line.410"></a>
+<span class="sourceLineNo">411</span>          WALUtil.filterCells(walEdit, cell -&gt; {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>            String cf = Bytes.toString(CellUtil.cloneFamily(cell));<a name="line.412"></a>
+<span class="sourceLineNo">413</span>            if (existColumnFamilies.contains(cf)) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>              return cell;<a name="line.414"></a>
+<span class="sourceLineNo">415</span>            } else {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>              missingCFs.add(cf);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>              return null;<a name="line.417"></a>
+<span class="sourceLineNo">418</span>            }<a name="line.418"></a>
+<span class="sourceLineNo">419</span>          });<a name="line.419"></a>
+<span class="sourceLineNo">420</span>          if (!walEdit.isEmpty()) {<a name="line.420"></a>
+<span class="sourceLineNo">421</span>            Entry newEntry = new Entry(e.getKey(), walEdit);<a name="line.421"></a>
+<span class="sourceLineNo">422</span>            entries.add(newEntry);<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>          if (!missingCFs.isEmpty()) {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            // Would potentially be better to retry in one of the outer loops<a name="line.426"></a>
+<span class="sourceLineNo">427</span>            // and add a table filter there; but that would break the encapsulation,<a name="line.427"></a>
+<span class="sourceLineNo">428</span>            // so we're doing the filtering here.<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            LOG.warn(<a name="line.429"></a>
+<span class="sourceLineNo">430</span>                "Missing column family detected at sink, local column family also does not exist,"<a name="line.430"></a>
+<span class="sourceLineNo">431</span>                    + " filtering edits for table '{}',column family '{}'", tableName, missingCFs);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>          }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>        }<a name="line.433"></a>
+<span class="sourceLineNo">434</span>        if (!entries.isEmpty()) {<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          entryList.add(entries);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>        }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      }<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    } catch (IOException iox) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      LOG.warn("Exception when creating connection to check local table", iox);<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      return oldEntryList;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    return entryList;<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>
+<span class="sourceLineNo">445</span>  private void reconnectToPeerCluster() {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>    AsyncClusterConnection connection = null;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    try {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>      connection =<a name="line.448"></a>
+<span class="sourceLineNo">449</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, null, User.getCurrent());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    } catch (IOException ioe) {<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      LOG.warn("{} Failed to create connection for peer cluster", logPeerId(), ioe);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    if (connection != null) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.conn = connection;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>    }<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  }<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>  private long parallelReplicate(CompletionService&lt;Integer&gt; pool, ReplicateContext replicateContext,<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      List&lt;List&lt;Entry&gt;&gt; batches) throws IOException {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    int futures = 0;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    for (int i = 0; i &lt; batches.size(); i++) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      List&lt;Entry&gt; entries = batches.get(i);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      if (!entries.isEmpty()) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>        if (LOG.isTraceEnabled()) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>          LOG.trace("{} Submitting {} entries of total size {}", logPeerId(), entries.size(),<a name="line.465"></a>
+<span class="sourceLineNo">466</span>            replicateContext.getSize());<a name="line.466"></a>
+<span class="sourceLineNo">467</span>        }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>        // RuntimeExceptions encountered here bubble up and are handled in ReplicationSource<a name="line.468"></a>
+<span class="sourceLineNo">469</span>        pool.submit(createReplicator(entries, i, replicateContext.getTimeout()));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        futures++;<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      }<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>    IOException iox = null;<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    long lastWriteTime = 0;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    for (int i = 0; i &lt; futures; i++) {<a name="line.476"></a>
+<span class="sourceLineNo">477</span>      try {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>        // wait for all futures, remove successful parts<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        // (only the remaining parts will be retried)<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        Future&lt;Integer&gt; f = pool.take();<a name="line.480"></a>
+<span class="sourceLineNo">481</span>        int index = f.get();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        List&lt;Entry&gt; batch = batches.get(index);<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        batches.set(index, Collections.emptyList()); // remove successful batch<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Find the most recent write time in the batch<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        long writeTime = batch.get(batch.size() - 1).getKey().getWriteTime();<a name="line.485"></a>
+<span class="sourceLineNo">486</span>        if (writeTime &gt; lastWriteTime) {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>          lastWriteTime = writeTime;<a name="line.487"></a>
+<span class="sourceLineNo">488</span>        }<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      } catch (InterruptedException ie) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        iox = new IOException(ie);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>      } catch (ExecutionException ee) {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        iox = ee.getCause() instanceof IOException?<a name="line.492"></a>
+<span class="sourceLineNo">493</span>          (IOException)ee.getCause(): new IOException(ee.getCause());<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      }<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    if (iox != null) {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      // if we had any exceptions, try again<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      throw iox;<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    }<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    return lastWriteTime;<a name="line.500"></a>
+<span class="sourceLineNo">501</span>  }<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>   * Do the shipping logic<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   */<a name="line.505"></a>
+<span class="sourceLineNo">506</span>  @Override<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  public boolean replicate(ReplicateContext replicateContext) {<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    CompletionService&lt;Integer&gt; pool = new ExecutorCompletionService&lt;&gt;(this.exec);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    int sleepMultiplier = 1;<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>    if (!peersSelected &amp;&amp; this.isRunning()) {<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      connectToPeers();<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      peersSelected = true;<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>    int numSinks = replicationSinkMgr.getNumSinks();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    if (numSinks == 0) {<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      if((System.currentTimeMillis() - lastSinkFetchTime) &gt;= (maxRetriesMultiplier*1000)) {<a name="line.518"></a>
+<span class="sourceLineNo">519</span>        LOG.warn(<a name="line.519"></a>
+<span class="sourceLineNo">520</span>          "No replication sinks found, returning without replicating. "<a name="line.520"></a>
+<span class="sourceLineNo">521</span>            + "The source should retry with the same set of edits. Not logging this again for "<a name="line.521"></a>
+<span class="sourceLineNo">522</span>            + "the next {} seconds.", maxRetriesMultiplier);<a name="line.522"></a>
+<span class="sourceLineNo">523</span>        lastSinkFetchTime = System.currentTimeMillis();<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      }<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      sleepForRetries("No sinks available at peer", sleepMultiplier);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      return false;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>    List&lt;List&lt;Entry&gt;&gt; batches = createBatches(replicateContext.getEntries());<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    while (this.isRunning() &amp;&amp; !exec.isShutdown()) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>      if (!isPeerEnabled()) {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        if (sleepForRetries("Replication is disabled", sleepMultiplier)) {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>          sleepMultiplier++;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        }<a name="line.534"></a>
+<span class="sourceLineNo">535</span>        continue;<a name="line.535"></a>
+<span class="sourceLineNo">536</span>      }<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      if (this.conn == null) {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>        reconnectToPeerCluster();<a name="line.538"></a>
+<span class="sourceLineNo">539</span>      }<a name="line.539"></a>
+<span class="sourceLineNo">540</span>      try {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>        // replicate the batches to sink side.<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        parallelReplicate(pool, replicateContext, batches);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>        return true;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>      } catch (IOException ioe) {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>        if (dropOnDeletedTables &amp;&amp; isTableNotFoundException(ioe)) {<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          // Only filter the edits to replicate and don't change the entries in replicateContext<a name="line.546"></a>
+<span class="sourceLineNo">547</span>          // as the upper layer rely on it.<a name="line.547"></a>
+<span class="sourceLineNo">548</span>          batches = filterNotExistTableEdits(batches);<a name="line.548"></a>
+<span class="sourceLineNo">549</span>          if (batches.isEmpty()) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>            LOG.warn("After filter not exist table's edits, 0 edits to replicate, just return");<a name="line.550"></a>
+<span class="sourceLineNo">551</span>            return true;<a name="line.551"></a>
+<span class="sourceLineNo">552</span>          }<a name="line.552"></a>
+<span class="sourceLineNo">553</span>        } else if (dropOnDeletedColumnFamilies &amp;&amp; isNoSuchColumnFamilyException(ioe)) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span>          batches = filterNotExistColumnFamilyEdits(batches);<a name="line.554"></a>
+<span class="sourceLineNo">555</span>          if (batches.isEmpty()) {<a name="line.555"></a>
+<span class="sourceLineNo">556</span>            LOG.warn(<a name="line.556"></a>
+<span class="sourceLineNo">557</span>                "After filter not exist column family's edits, 0 edits to replicate, just return");<a name="line.557"></a>
+<span class="sourceLineNo">558</span>            return true;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>          }<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        } else {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>          if (ioe instanceof SocketTimeoutException) {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>            // This exception means we waited for more than 60s and nothing<a name="line.562"></a>
+<span class="sourceLineNo">563</span>            // happened, the cluster is alive and calling it right away<a name="line.563"></a>
+<span class="sourceLineNo">564</span>            // even for a test just makes things worse.<a name="line.564"></a>
+<span class="sourceLineNo">565</span>            sleepForRetries("Encountered a SocketTimeoutException. Since the " +<a name="line.565"></a>
+<span class="sourceLineNo">566</span>                  "call to the remote cluster timed out, which is usually " +<a name="line.566"></a>
+<span class="sourceLineNo">567</span>                  "caused by a machine failure or a massive slowdown",<a name="line.567"></a>
+<span class="sourceLineNo">568</span>              this.socketTimeoutMultiplier);<a name="line.568"></a>
+<span class="sourceLineNo">569</span>          } else if (ioe instanceof ConnectException || ioe instanceof UnknownHostException) {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>            LOG.warn("{} Peer is unavailable, rechecking all sinks: ", logPeerId(), ioe);<a name="line.570"></a>
+<span class="sourceLineNo">571</span>            replicationSinkMgr.chooseSinks();<a name="line.571"></a>
+<span class="sourceLineNo">572</span>          } else {<a name="line.572"></a>
+<span class="sourceLineNo">573</span>            LOG.warn("{} Can't replicate because of a local or network error: ", logPeerId(), ioe);<a name="line.573"></a>
+<span class="sourceLineNo">574</span>          }<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        if (sleepForRetries("Since we are unable to replicate", sleepMultiplier)) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          sleepMultiplier++;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>        }<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      }<a name="line.579"></a>
+<span class="sourceLineNo">580</span>    }<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    return false; // in case we exited before replicating<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>  protected boolean isPeerEnabled() {<a name="line.584"></a>
+<span class="sourceLineNo">585</span>    return ctx.getReplicationPeer().isPeerEnabled();<a name="line.585"></a>
+<span class="sourceLineNo">586</span>  }<a name="line.586"></a>
+<span class="sourceLineNo">587</span><a name="line.587"></a>
+<span class="sourceLineNo">588</span>  @Override<a name="line.588"></a>
+<span class="sourceLineNo">589</span>  protected void doStop() {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    disconnect(); // don't call super.doStop()<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    if (this.conn != null) {<a name="line.591"></a>
+<span class="sourceLineNo">592</span>      try {<a name="line.592"></a>
+<span class="sourceLineNo">593</span>        this.conn.close();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        this.conn = null;<a name="line.594"></a>
+<span class="sourceLineNo">595</span>      } catch (IOException e) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        LOG.warn("{} Failed to close the connection", logPeerId());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>      }<a name="line.597"></a>
+<span class="sourceLineNo">598</span>    }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    // Allow currently running replication tasks to finish<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    exec.shutdown();<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    try {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      exec.awaitTermination(maxTerminationWait, TimeUnit.MILLISECONDS);<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    } catch (InterruptedException e) {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>    }<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    // Abort if the tasks did not terminate in time<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    if (!exec.isTerminated()) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      String errMsg = "HBaseInterClusterReplicationEndpoint termination failed. The " +<a name="line.607"></a>
+<span class="sourceLineNo">608</span>          "ThreadPoolExecutor failed to finish all tasks within " + maxTerminationWait + "ms. " +<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          "Aborting to prevent Replication from deadlocking. See HBASE-16081.";<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      abortable.abort(errMsg, new IOException(errMsg));<a name="line.610"></a>
+<span class="sourceLineNo">611</span>    }<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    notifyStopped();<a name="line.612"></a>
+<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
+<span class="sourceLineNo">614</span><a name="line.614"></a>
+<span class="sourceLineNo">615</span>  @VisibleForTesting<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  protected int replicateEntries(List&lt;Entry&gt; entries, int batchIndex, int timeout)<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      throws IOException {<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    SinkPeer sinkPeer = null;<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      int entriesHashCode = System.identityHashCode(entries);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>      if (LOG.isTraceEnabled()) {<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        long size = entries.stream().mapToLong(this::getEstimatedEntrySize).sum();<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        LOG.trace("{} Replicating batch {} of {} entries with total size {} bytes to {}",<a name="line.623"></a>
+<span class="sourceLineNo">624</span>          logPeerId(), entriesHashCode, entries.size(), size, replicationClusterId);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>      }<a name="line.625"></a>
+<span class="sourceLineNo">626</span>      sinkPeer = replicationSinkMgr.getReplicationSink();<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      AsyncRegionServerAdmin rsAdmin = sinkPeer.getRegionServer();<a name="line.627"></a>
+<span class="sourceLineNo">628</span>      try {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        ReplicationProtbufUtil.replicateWALEntry(rsAdmin,<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          entries.toArray(new Entry[entries.size()]), replicationClusterId, baseNamespaceDir,<a name="line.630"></a>
+<span class="sourceLineNo">631</span>          hfileArchiveDir, timeout);<a name="line.631"></a>
+<span class="sourceLineNo">632</span>        if (LOG.isTraceEnabled()) {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>          LOG.trace("{} Completed replicating batch {}", logPeerId(), entriesHashCode);<a name="line.633"></a>
+<span class="sourceLineNo">634</span>        }<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      } catch (IOException e) {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        if (LOG.isTraceEnabled()) {<a name="line.636"></a>
+<span class="sourceLineNo">637</span>          LOG.trace("{} Failed replicating batch {}", logPeerId(), entriesHashCode, e);<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        }<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        throw e;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      }<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      replicationSinkMgr.reportSinkSuccess(sinkPeer);<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    } catch (IOException ioe) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      if (sinkPeer != null) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        replicationSinkMgr.reportBadSink(sinkPeer);<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      }<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      throw ioe;<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    }<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    return batchIndex;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  private int serialReplicateRegionEntries(List&lt;Entry&gt; entries, int batchIndex, int timeout)<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      throws IOException {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>    int batchSize = 0, index = 0;<a name="line.653"></a>
+<span class="sourceLineNo">654</span>    List&lt;Entry&gt; batch = new ArrayList&lt;&gt;();<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    for (Entry entry : entries) {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      int entrySize = getEstimatedEntrySize(entry);<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      if (batchSize &gt; 0 &amp;&amp; batchSize + entrySize &gt; replicationRpcLimit) {<a name="line.657"></a>
+<span class="sourceLineNo">658</span>        replicateEntries(batch, index++, timeout);<a name="line.658"></a>
+<span class="sourceLineNo">659</span>        batch.clear();<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        batchSize = 0;<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      batch.add(entry);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      batchSize += entrySize;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>    }<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    if (batchSize &gt; 0) {<a name="line.665"></a>
+<span class="sourceLineNo">666</span>      replicateEntries(batch, index, timeout);<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    }<a name="line.667"></a>
+<span class="sourceLineNo">668</span>    return batchIndex;<a name="line.668"></a>
+<span class="sourceLineNo">669</span>  }<a name="line.669"></a>
+<span class="sourceLineNo">670</span><a name="line.670"></a>
+<span class="sourceLineNo">671</span>  @VisibleForTesting<a name="line.671"></a>
+<span class="sourceLineNo">672</span>  protected Callable&lt;Integer&gt; createReplicator(List&lt;Entry&gt; entries, int batchIndex, int timeout) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>    return isSerial ? () -&gt; serialReplicateRegionEntries(entries, batchIndex, timeout)<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        : () -&gt; replicateEntries(entries, batchIndex, timeout);<a name="line.674"></a>
+<span class="sourceLineNo">675</span>  }<a name="line.675"></a>
+<span class="sourceLineNo">676</span><a name="line.676"></a>
+<span class="sourceLineNo">677</span>  private String logPeerId(){<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    return "[Source for peer " + this.ctx.getPeerId() + "]:";<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  }<a name="line.679"></a>
+<span class="sourceLineNo">680</span><a name="line.680"></a>
+<span class="sourceLineNo">681</span>}<a name="line.681"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
index 5e84980..61b6a52 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.SinkPeer.html
@@ -158,44 +158,47 @@
 <span class="sourceLineNo">150</span>   */<a name="line.150"></a>
 <span class="sourceLineNo">151</span>  public synchronized void chooseSinks() {<a name="line.151"></a>
 <span class="sourceLineNo">152</span>    List&lt;ServerName&gt; slaveAddresses = endpoint.getRegionServers();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Collections.shuffle(slaveAddresses, ThreadLocalRandom.current());<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    badReportCounts.clear();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public synchronized int getNumSinks() {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    return sinks.size();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  @VisibleForTesting<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected List&lt;ServerName&gt; getSinksForTesting() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return Collections.unmodifiableList(sinks);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Wraps a replication region server sink to provide the ability to identify<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * it.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public static class SinkPeer {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private ServerName serverName;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private AsyncRegionServerAdmin regionServer;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>    public SinkPeer(ServerName serverName, AsyncRegionServerAdmin regionServer) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.serverName = serverName;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.regionServer = regionServer;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    ServerName getServerName() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return serverName;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public AsyncRegionServerAdmin getRegionServer() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      return regionServer;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>}<a name="line.190"></a>
+<span class="sourceLineNo">153</span>    if(slaveAddresses.isEmpty()){<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      LOG.warn("No sinks available at peer. Will not be able to replicate");<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    Collections.shuffle(slaveAddresses, ThreadLocalRandom.current());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    badReportCounts.clear();<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>  public synchronized int getNumSinks() {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return sinks.size();<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>  @VisibleForTesting<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  protected List&lt;ServerName&gt; getSinksForTesting() {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return Collections.unmodifiableList(sinks);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * Wraps a replication region server sink to provide the ability to identify<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * it.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  public static class SinkPeer {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    private ServerName serverName;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    private AsyncRegionServerAdmin regionServer;<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public SinkPeer(ServerName serverName, AsyncRegionServerAdmin regionServer) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      this.serverName = serverName;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      this.regionServer = regionServer;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>    ServerName getServerName() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      return serverName;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    public AsyncRegionServerAdmin getRegionServer() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      return regionServer;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>}<a name="line.193"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
index 5e84980..61b6a52 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSinkManager.html
@@ -158,44 +158,47 @@
 <span class="sourceLineNo">150</span>   */<a name="line.150"></a>
 <span class="sourceLineNo">151</span>  public synchronized void chooseSinks() {<a name="line.151"></a>
 <span class="sourceLineNo">152</span>    List&lt;ServerName&gt; slaveAddresses = endpoint.getRegionServers();<a name="line.152"></a>
-<span class="sourceLineNo">153</span>    Collections.shuffle(slaveAddresses, ThreadLocalRandom.current());<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    badReportCounts.clear();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>  public synchronized int getNumSinks() {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    return sinks.size();<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  }<a name="line.162"></a>
-<span class="sourceLineNo">163</span><a name="line.163"></a>
-<span class="sourceLineNo">164</span>  @VisibleForTesting<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected List&lt;ServerName&gt; getSinksForTesting() {<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return Collections.unmodifiableList(sinks);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Wraps a replication region server sink to provide the ability to identify<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   * it.<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public static class SinkPeer {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private ServerName serverName;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    private AsyncRegionServerAdmin regionServer;<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>    public SinkPeer(ServerName serverName, AsyncRegionServerAdmin regionServer) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.serverName = serverName;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.regionServer = regionServer;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span><a name="line.181"></a>
-<span class="sourceLineNo">182</span>    ServerName getServerName() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      return serverName;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public AsyncRegionServerAdmin getRegionServer() {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      return regionServer;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>  }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>}<a name="line.190"></a>
+<span class="sourceLineNo">153</span>    if(slaveAddresses.isEmpty()){<a name="line.153"></a>
+<span class="sourceLineNo">154</span>      LOG.warn("No sinks available at peer. Will not be able to replicate");<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    }<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    Collections.shuffle(slaveAddresses, ThreadLocalRandom.current());<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    int numSinks = (int) Math.ceil(slaveAddresses.size() * ratio);<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    sinks = slaveAddresses.subList(0, numSinks);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    lastUpdateToPeers = System.currentTimeMillis();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    badReportCounts.clear();<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>  public synchronized int getNumSinks() {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    return sinks.size();<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>  @VisibleForTesting<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  protected List&lt;ServerName&gt; getSinksForTesting() {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    return Collections.unmodifiableList(sinks);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  }<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span>  /**<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   * Wraps a replication region server sink to provide the ability to identify<a name="line.173"></a>
+<span class="sourceLineNo">174</span>   * it.<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  public static class SinkPeer {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    private ServerName serverName;<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    private AsyncRegionServerAdmin regionServer;<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public SinkPeer(ServerName serverName, AsyncRegionServerAdmin regionServer) {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      this.serverName = serverName;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      this.regionServer = regionServer;<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>    ServerName getServerName() {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      return serverName;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>    public AsyncRegionServerAdmin getRegionServer() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      return regionServer;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span>}<a name="line.193"></a>
 
 
 
diff --git a/downloads.html b/downloads.html
index 15bc666..2fa143f 100644
--- a/downloads.html
+++ b/downloads.html
@@ -463,7 +463,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/export_control.html b/export_control.html
index 97bfcc8..78d11f6 100644
--- a/export_control.html
+++ b/export_control.html
@@ -197,7 +197,7 @@ for more details.</p>
         <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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/index.html b/index.html
index e190c95..7728042 100644
--- a/index.html
+++ b/index.html
@@ -275,7 +275,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/issue-tracking.html b/issue-tracking.html
index f9c7c31..514d2db 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -169,7 +169,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/mail-lists.html b/mail-lists.html
index 00405d9..8a9e09c 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -229,7 +229,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/metrics.html b/metrics.html
index 0215876..52fed5c 100644
--- a/metrics.html
+++ b/metrics.html
@@ -325,7 +325,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
         <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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/old_news.html b/old_news.html
index ef1c7a3..b5b8584 100644
--- a/old_news.html
+++ b/old_news.html
@@ -316,7 +316,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/plugin-management.html b/plugin-management.html
index 029e641..150ffb7 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -321,7 +321,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/plugins.html b/plugins.html
index 5703724..473cdec 100644
--- a/plugins.html
+++ b/plugins.html
@@ -248,7 +248,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/poweredbyhbase.html b/poweredbyhbase.html
index 6091a0f..fb06c33 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -650,7 +650,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/project-info.html b/project-info.html
index cb836f6..b215dae 100644
--- a/project-info.html
+++ b/project-info.html
@@ -210,7 +210,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/project-reports.html b/project-reports.html
index 3d6e050..cae14fa 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -186,7 +186,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/project-summary.html b/project-summary.html
index dfa34e8..210e9a3 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -212,7 +212,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/pseudo-distributed.html b/pseudo-distributed.html
index c1267c9..cf4f145 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -174,7 +174,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
         <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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/replication.html b/replication.html
index f8fba39..8454057 100644
--- a/replication.html
+++ b/replication.html
@@ -169,7 +169,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/resources.html b/resources.html
index 3ac043c..0e833ad 100644
--- a/resources.html
+++ b/resources.html
@@ -197,7 +197,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/source-repository.html b/source-repository.html
index f2e6410..bc36bb7 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -180,7 +180,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/sponsors.html b/sponsors.html
index 1410aee..95c8c73 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -199,7 +199,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/supportingprojects.html b/supportingprojects.html
index aa312c7..3e921ed 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -390,7 +390,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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/team-list.html b/team-list.html
index 1972daf..9880c94 100644
--- a/team-list.html
+++ b/team-list.html
@@ -701,7 +701,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-07-25</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-07-27</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>