You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2019/03/06 14:53:51 UTC
[hbase-site] branch asf-site updated: Published site at
177d43d8db8ee90273db1d7c317725f0792a4cd0.
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 11eab4e Published site at 177d43d8db8ee90273db1d7c317725f0792a4cd0.
11eab4e is described below
commit 11eab4e02b4803b2087ea6bde098bc0cb2486871
Author: jenkins <bu...@apache.org>
AuthorDate: Wed Mar 6 14:53:34 2019 +0000
Published site at 177d43d8db8ee90273db1d7c317725f0792a4cd0.
---
acid-semantics.html | 2 +-
apache_hbase_reference_guide.pdf | 4 +-
book.html | 2 +-
bulk-loads.html | 2 +-
checkstyle-aggregate.html | 48 +-
coc.html | 2 +-
dependencies.html | 2 +-
dependency-convergence.html | 2 +-
dependency-info.html | 2 +-
dependency-management.html | 2 +-
devapidocs/constant-values.html | 4 +-
devapidocs/index-all.html | 2 +
.../apache/hadoop/hbase/backup/package-tree.html | 2 +-
.../apache/hadoop/hbase/client/package-tree.html | 22 +-
.../apache/hadoop/hbase/filter/package-tree.html | 8 +-
.../apache/hadoop/hbase/io/hfile/package-tree.html | 6 +-
.../org/apache/hadoop/hbase/ipc/package-tree.html | 2 +-
.../hadoop/hbase/mapreduce/package-tree.html | 4 +-
.../VerifyReplication.Verifier.Counters.html | 16 +-
.../replication/VerifyReplication.Verifier.html | 30 +-
.../mapreduce/replication/VerifyReplication.html | 49 +-
.../apache/hadoop/hbase/master/package-tree.html | 4 +-
.../hbase/master/procedure/package-tree.html | 4 +-
.../hadoop/hbase/monitoring/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/package-tree.html | 20 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../apache/hadoop/hbase/quotas/package-tree.html | 8 +-
.../hadoop/hbase/regionserver/package-tree.html | 18 +-
.../hbase/regionserver/wal/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/rest/RESTServer.html | 32 +-
.../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 +-
.../src-html/org/apache/hadoop/hbase/Version.html | 4 +-
.../VerifyReplication.Verifier.Counters.html | 1268 ++++++++++----------
.../replication/VerifyReplication.Verifier.html | 1268 ++++++++++----------
.../mapreduce/replication/VerifyReplication.html | 1268 ++++++++++----------
.../org/apache/hadoop/hbase/rest/RESTServer.html | 641 +++++-----
downloads.html | 2 +-
export_control.html | 2 +-
index.html | 2 +-
issue-management.html | 2 +-
licenses.html | 2 +-
mailing-lists.html | 2 +-
metrics.html | 2 +-
old_news.html | 2 +-
plugin-management.html | 2 +-
plugins.html | 2 +-
poweredbyhbase.html | 2 +-
project-info.html | 2 +-
project-reports.html | 2 +-
pseudo-distributed.html | 2 +-
replication.html | 2 +-
resources.html | 2 +-
scm.html | 2 +-
sponsors.html | 2 +-
summary.html | 2 +-
supportingprojects.html | 2 +-
team.html | 2 +-
testdevapidocs/index-all.html | 16 +
.../hadoop/hbase/TestHBaseTestingUtility.html | 12 +-
.../apache/hadoop/hbase/backup/package-tree.html | 2 +-
.../TestReplicationAdminWithClusters.html | 2 +-
.../apache/hadoop/hbase/io/hfile/package-tree.html | 2 +-
.../org/apache/hadoop/hbase/package-tree.html | 8 +-
.../hadoop/hbase/procedure2/package-tree.html | 4 +-
.../hadoop/hbase/regionserver/package-tree.html | 6 +-
.../replication/TestNamespaceReplication.html | 2 +-
.../hbase/replication/TestReplicationBase.html | 58 +-
.../TestReplicationChangingPeerRegionservers.html | 2 +-
.../TestReplicationDisableInactivePeer.html | 2 +-
.../replication/TestReplicationDroppedTables.html | 2 +-
.../TestReplicationEmptyWALRecovery.html | 2 +-
.../hbase/replication/TestReplicationEndpoint.html | 2 +-
.../replication/TestReplicationKillMasterRS.html | 2 +-
.../TestReplicationKillMasterRSCompressed.html | 2 +-
...ReplicationKillMasterRSWithSeparateOldWALs.html | 2 +-
.../hbase/replication/TestReplicationKillRS.html | 2 +-
.../replication/TestReplicationKillSlaveRS.html | 2 +-
...tReplicationKillSlaveRSWithSeparateOldWALs.html | 2 +-
.../replication/TestReplicationMetricsforUI.html | 2 +-
.../replication/TestReplicationSmallTests.html | 2 +-
.../replication/TestReplicationSmallTestsSync.html | 2 +-
.../hbase/replication/TestReplicationStatus.html | 2 +-
.../replication/TestReplicationSyncUpTool.html | 2 +-
...estReplicationSyncUpToolWithBulkLoadedData.html | 2 +-
.../hbase/replication/TestVerifyReplication.html | 186 ++-
...estReplicationEndpointWithMultipleAsyncWAL.html | 2 +-
.../TestReplicationEndpointWithMultipleWAL.html | 2 +-
...KillMasterRSCompressedWithMultipleAsyncWAL.html | 2 +-
...ationKillMasterRSCompressedWithMultipleWAL.html | 2 +-
...tReplicationSyncUpToolWithMultipleAsyncWAL.html | 2 +-
.../TestReplicationSyncUpToolWithMultipleWAL.html | 2 +-
.../replication/regionserver/TestReplicator.html | 2 +-
.../org/apache/hadoop/hbase/test/package-tree.html | 4 +-
.../org/apache/hadoop/hbase/wal/package-tree.html | 4 +-
.../hadoop/hbase/TestHBaseTestingUtility.html | 448 +++----
.../hbase/replication/TestReplicationBase.html | 362 +++---
.../hbase/replication/TestVerifyReplication.html | 1188 ++++++++++--------
100 files changed, 3764 insertions(+), 3402 deletions(-)
diff --git a/acid-semantics.html b/acid-semantics.html
index d30fd6b..25765a3 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -457,7 +457,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 1c74830..f0d07f2 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
/Author (Apache HBase Team)
/Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
/Producer (Apache HBase Team)
-/ModDate (D:20190305142937+00'00')
-/CreationDate (D:20190305145000+00'00')
+/ModDate (D:20190306142937+00'00')
+/CreationDate (D:20190306145005+00'00')
>>
endobj
2 0 obj
diff --git a/book.html b/book.html
index 7621f08..d36d9d7 100644
--- a/book.html
+++ b/book.html
@@ -41465,7 +41465,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
<div id="footer">
<div id="footer-text">
Version 3.0.0-SNAPSHOT<br>
-Last updated 2019-03-05 14:29:37 UTC
+Last updated 2019-03-06 14:29:37 UTC
</div>
</div>
</body>
diff --git a/bulk-loads.html b/bulk-loads.html
index 324d9d2..e42d0ae 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -162,7 +162,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 a5557ce..961bc9d 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -56411,49 +56411,49 @@
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 105).</td>
-<td>271</td></tr>
+<td>275</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'method call' child has incorrect indentation level 14, expected level should be 16.</td>
-<td>272</td></tr>
+<td>276</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>385</td></tr>
+<td>389</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>MethodLength</td>
-<td>Method length is 158 lines (max allowed is 150).</td>
-<td>511</td></tr>
+<td>Method length is 164 lines (max allowed is 150).</td>
+<td>520</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 105).</td>
-<td>659</td></tr>
+<td>674</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 104).</td>
-<td>700</td></tr>
+<td>715</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 119).</td>
-<td>716</td></tr>
+<td>732</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 106).</td>
-<td>722</td></tr></table></div>
+<td>738</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.master.AbstractTestDLS.java">org/apache/hadoop/hbase/master/AbstractTestDLS.java</h3>
<table border="0" class="table table-striped">
@@ -84674,55 +84674,55 @@
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>392</td></tr>
+<td>415</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>397</td></tr>
+<td>420</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>398</td></tr>
+<td>421</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 35.</td>
-<td>439</td></tr>
+<td>462</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 35.</td>
-<td>440</td></tr>
+<td>463</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 35.</td>
-<td>441</td></tr>
+<td>464</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>468</td></tr>
+<td>491</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>469</td></tr>
+<td>492</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>indentation</td>
<td>Indentation</td>
<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>470</td></tr></table></div>
+<td>493</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.replication.WALCellFilter.java">org/apache/hadoop/hbase/replication/WALCellFilter.java</h3>
<table border="0" class="table table-striped">
@@ -85979,31 +85979,31 @@
<td>design</td>
<td>VisibilityModifier</td>
<td>Variable 'conf' must be private and have accessor methods.</td>
-<td>106</td></tr>
+<td>109</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>220</td></tr>
+<td>223</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 101).</td>
-<td>258</td></tr>
+<td>261</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 104).</td>
-<td>260</td></tr>
+<td>263</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" alt="" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 110).</td>
-<td>335</td></tr></table></div>
+<td>338</td></tr></table></div>
<div class="section">
<h3 id="org.apache.hadoop.hbase.rest.RESTServlet.java">org/apache/hadoop/hbase/rest/RESTServlet.java</h3>
<table border="0" class="table table-striped">
@@ -110312,7 +110312,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 0fd335d..84e19cc 100644
--- a/coc.html
+++ b/coc.html
@@ -231,7 +231,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 f3d0b3a..dfbe0b2 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -311,7 +311,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 ce25223..fc8483d 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -541,7 +541,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 223b603..91d3068 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -184,7 +184,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 d662fdf..f9a57b2 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -870,7 +870,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</li>
</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index f71c2c5..f61f3d8 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3913,7 +3913,7 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Tue Mar 5 14:34:30 UTC 2019"</code></td>
+<td class="colLast"><code>"Wed Mar 6 14:34:26 UTC 2019"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
@@ -3927,7 +3927,7 @@
<!-- -->
</a><code>public static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"0d461d01d68fa5b007aa444e9f783a3b"</code></td>
+<td class="colLast"><code>"5a841dab93e365e2d1d2f6503246cc1b"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 772ee13..e065516 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -84121,6 +84121,8 @@ service.</div>
</dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/ZNodePaths.html#peersZNode">peersZNode</a></span> - Variable in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/ZNodePaths.html" title="class in org.apache.hadoop.hbase.zookeeper">ZNodePaths</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#peerTableName">peerTableName</a></span> - Variable in class org.apache.hadoop.hbase.mapreduce.replication.<a href="org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html" title="class in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/PendingWatcher.html#pending">pending</a></span> - Variable in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/PendingWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">PendingWatcher</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html#pendingAssignQueue">pendingAssignQueue</a></span> - Variable in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master.assignment">AssignmentManager</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 2389486..9c2af4f 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -167,9 +167,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
</ul>
</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 4321d15..a5d0d3b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -551,24 +551,24 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/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/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/AsyncProcessTask.SubmittedRows.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncProcessTask.SubmittedRows</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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.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/AsyncRequestFutureImpl.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncRequestFutureImpl.Retry</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/ScannerCallable.MoreResults.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ScannerCallable.MoreResults</span></a></li>
<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
</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 2a1fe97..c253e47 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -184,13 +184,13 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</span></a></li>
<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">CompareFilter.CompareOp</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/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>
</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 cccace9..6d365f5 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -275,12 +275,12 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.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/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.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/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/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/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">Cacheable.MemoryType</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 cb4ea86..148fecd 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -354,8 +354,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/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/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/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 248cd20..da3530a 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -297,10 +297,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
index b49cafa..eb04761 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.127">VerifyReplication.Verifier.Counters</a>
+<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.129">VerifyReplication.Verifier.Counters</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a><<a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a>></pre>
</li>
</ul>
@@ -219,7 +219,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>GOODROWS</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.128">GOODROWS</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.130">GOODROWS</a></pre>
</li>
</ul>
<a name="BADROWS">
@@ -228,7 +228,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>BADROWS</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.128">BADROWS</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.130">BADROWS</a></pre>
</li>
</ul>
<a name="ONLY_IN_SOURCE_TABLE_ROWS">
@@ -237,7 +237,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>ONLY_IN_SOURCE_TABLE_ROWS</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.128">ONLY_IN_SOURCE_TABLE_ROWS</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.130">ONLY_IN_SOURCE_TABLE_ROWS</a></pre>
</li>
</ul>
<a name="ONLY_IN_PEER_TABLE_ROWS">
@@ -246,7 +246,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>ONLY_IN_PEER_TABLE_ROWS</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.128">ONLY_IN_PEER_TABLE_ROWS</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.130">ONLY_IN_PEER_TABLE_ROWS</a></pre>
</li>
</ul>
<a name="CONTENT_DIFFERENT_ROWS">
@@ -255,7 +255,7 @@ the order they are declared.</div>
<ul class="blockListLast">
<li class="blockList">
<h4>CONTENT_DIFFERENT_ROWS</h4>
-<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.128">CONTENT_DIFFERENT_ROWS</a></pre>
+<pre>public static final <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.130">CONTENT_DIFFERENT_ROWS</a></pre>
</li>
</ul>
</li>
@@ -272,7 +272,7 @@ the order they are declared.</div>
<ul class="blockList">
<li class="blockList">
<h4>values</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.127">values</a>()</pre>
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.129">values</a>()</pre>
<div class="block">Returns an array containing the constants of this enum type, in
the order they are declared. This method may be used to iterate
over the constants as follows:
@@ -292,7 +292,7 @@ for (VerifyReplication.Verifier.Counters c : VerifyReplication.Verifier.Counters
<ul class="blockListLast">
<li class="blockList">
<h4>valueOf</h4>
-<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.127">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="cla [...]
+<pre>public static <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html#line.129">valueOf</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="cla [...]
<div class="block">Returns the enum constant of this type with the specified name.
The string must match <i>exactly</i> an identifier used to declare an
enum constant in this type. (Extraneous whitespace characters are
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
index 6905c37..216d32e 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.124">VerifyReplication.Verifier</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.126">VerifyReplication.Verifier</a>
extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">TableMapper</a><<a href="../../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>></pre>
<div class="block">Map-only comparator for 2 tables</div>
</li>
@@ -296,7 +296,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>sourceConnection</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.131">sourceConnection</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.133">sourceConnection</a></pre>
</li>
</ul>
<a name="sourceTable">
@@ -305,7 +305,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>sourceTable</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.132">sourceTable</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.134">sourceTable</a></pre>
</li>
</ul>
<a name="replicatedConnection">
@@ -314,7 +314,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>replicatedConnection</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.133">replicatedConnection</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.135">replicatedConnection</a></pre>
</li>
</ul>
<a name="replicatedTable">
@@ -323,7 +323,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>replicatedTable</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.134">replicatedTable</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.136">replicatedTable</a></pre>
</li>
</ul>
<a name="replicatedScanner">
@@ -332,7 +332,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>replicatedScanner</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.135">replicatedScanner</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.137">replicatedScanner</a></pre>
</li>
</ul>
<a name="currentCompareRowInPeerTable">
@@ -341,7 +341,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>currentCompareRowInPeerTable</h4>
-<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.136">currentCompareRowInPeerTable</a></pre>
+<pre>private <a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.138">currentCompareRowInPeerTable</a></pre>
</li>
</ul>
<a name="sleepMsBeforeReCompare">
@@ -350,7 +350,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>sleepMsBeforeReCompare</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.137">sleepMsBeforeReCompare</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.139">sleepMsBeforeReCompare</a></pre>
</li>
</ul>
<a name="delimiter">
@@ -359,7 +359,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>delimiter</h4>
-<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.138">delimiter</a></pre>
+<pre>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.140">delimiter</a></pre>
</li>
</ul>
<a name="verbose">
@@ -368,7 +368,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>verbose</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.139">verbose</a></pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.141">verbose</a></pre>
</li>
</ul>
<a name="batch">
@@ -377,7 +377,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockListLast">
<li class="blockList">
<h4>batch</h4>
-<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.140">batch</a></pre>
+<pre>private int <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.142">batch</a></pre>
</li>
</ul>
</li>
@@ -394,7 +394,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockListLast">
<li class="blockList">
<h4>Verifier</h4>
-<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.124">Verifier</a>()</pre>
+<pre>public <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.126">Verifier</a>()</pre>
</li>
</ul>
</li>
@@ -411,7 +411,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>map</h4>
-<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.151">map</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a> row,
+<pre>public void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.153">map</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a> row,
<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> value,
org.apache.hadoop.mapreduce.Mapper.Context 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>
@@ -435,7 +435,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockList">
<li class="blockList">
<h4>logFailRowAndIncreaseCounter</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.261">logFailRowAndIncreaseCounter</a>(org.apache.hadoop.mapreduce.Mapper.Context context,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.265">logFailRowAndIncreaseCounter</a>(org.apache.hadoop.mapreduce.Mapper.Context context,
<a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce.replication">VerifyReplication.Verifier.Counters</a> counter,
<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> row)</pre>
</li>
@@ -446,7 +446,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/mapreduce/TableMapper
<ul class="blockListLast">
<li class="blockList">
<h4>cleanup</h4>
-<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.288">cleanup</a>(org.apache.hadoop.mapreduce.Mapper.Context context)</pre>
+<pre>protected void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html#line.292">cleanup</a>(org.apache.hadoop.mapreduce.Mapper.Context context)</pre>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code>cleanup</code> in class <code>org.apache.hadoop.mapreduce.Mapper<<a href="../../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>,<a href="../../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hba [...]
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
index 2784603..25a135e 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
@@ -231,33 +231,37 @@ implements org.apache.hadoop.util.Tool</pre>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>(package 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/mapreduce/replication/VerifyReplication.html#rowPrefixes">rowPrefixes</a></span></code> </td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#peerTableName">peerTableName</a></span></code> </td>
</tr>
<tr class="altColor">
+<td class="colFirst"><code>(package 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/mapreduce/replication/VerifyReplication.html#rowPrefixes">rowPrefixes</a></span></code> </td>
+</tr>
+<tr class="rowColor">
<td class="colFirst"><code>(package private) int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#sleepMsBeforeReCompare">sleepMsBeforeReCompare</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>(package 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/mapreduce/replication/VerifyReplication.html#sourceSnapshotName">sourceSnapshotName</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>(package 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/mapreduce/replication/VerifyReplication.html#sourceSnapshotTmpDir">sourceSnapshotTmpDir</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>(package private) long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#startTime">startTime</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>(package 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/mapreduce/replication/VerifyReplication.html#tableName">tableName</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>(package private) boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#verbose">verbose</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>(package private) int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#versions">versions</a></span></code> </td>
</tr>
@@ -585,13 +589,22 @@ implements org.apache.hadoop.util.Tool</pre>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.116">peerHBaseRootAddress</a></pre>
</li>
</ul>
+<a name="peerTableName">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>peerTableName</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.118">peerTableName</a></pre>
+</li>
+</ul>
<a name="JOB_NAME_CONF_KEY">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>JOB_NAME_CONF_KEY</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.119">JOB_NAME_CONF_KEY</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.121">JOB_NAME_CONF_KEY</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication.JOB_NAME_CONF_KEY">Constant Field Values</a></dd>
@@ -629,7 +642,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>getPeerQuorumConfig</h4>
-<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>,org.apache.hadoop.conf.Configuration> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.336">getPeerQuor [...]
+<pre>private static <a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeerConfig</a>,org.apache.hadoop.conf.Configuration> <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.340">getPeerQuor [...]
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
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>
@@ -644,7 +657,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>restoreSnapshotForPeerCluster</h4>
-<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.365">restoreSnapshotForPeerCluster</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>private void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.369">restoreSnapshotForPeerCluster</a>(org.apache.hadoop.conf.Configuration conf,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerQuorumAddress)
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>
@@ -659,7 +672,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>createSubmittableJob</h4>
-<pre>public org.apache.hadoop.mapreduce.Job <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.384">createSubmittableJob</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>public org.apache.hadoop.mapreduce.Job <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.388">createSubmittableJob</a>(org.apache.hadoop.conf.Configuration conf,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
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">Sets up the actual job.</div>
@@ -680,7 +693,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>setRowPrefixFilter</h4>
-<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.488">setRowPrefixFilter</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> scan,
+<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.497">setRowPrefixFilter</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> scan,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> rowPrefixes)</pre>
</li>
</ul>
@@ -690,7 +703,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>setStartAndStopRows</h4>
-<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.504">setStartAndStopRows</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> scan,
+<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.513">setStartAndStopRows</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> scan,
byte[] startPrefixRow,
byte[] lastPrefixRow)</pre>
</li>
@@ -701,7 +714,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>doCommandLine</h4>
-<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.512">doCommandLine</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</pre>
+<pre>public boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.521">doCommandLine</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)</pre>
</li>
</ul>
<a name="isPeerQuorumAddress-java.lang.String-">
@@ -710,7 +723,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>isPeerQuorumAddress</h4>
-<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.671">isPeerQuorumAddress</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> cmd)</pre>
+<pre>private boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.686">isPeerQuorumAddress</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> cmd)</pre>
</li>
</ul>
<a name="printUsage-java.lang.String-">
@@ -719,7 +732,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>printUsage</h4>
-<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.684">printUsage</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> errorMsg)</pre>
+<pre>private static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.699">printUsage</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> errorMsg)</pre>
</li>
</ul>
<a name="run-java.lang.String:A-">
@@ -728,7 +741,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.729">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public int <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.745">run</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -744,7 +757,7 @@ implements org.apache.hadoop.util.Tool</pre>
<ul class="blockListLast">
<li class="blockList">
<h4>main</h4>
-<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.744">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public static void <a href="../../../../../../src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html#line.760">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Main entry point.</div>
<dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index f341ee6..af260ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -355,11 +355,11 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/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>
+<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>
</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 11171cd..ffb7785 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/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><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
</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 7524d90..452eaee 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -127,8 +127,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 9d46df1..2faecb7 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -433,19 +433,19 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
</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 c116168..91267b0 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,11 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</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 3763a20..3673229 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -241,13 +241,13 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
+<li type="circle">org.apache.hadoop.hbase.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/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
</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 eaa9b97..0af4e4e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -716,20 +716,20 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/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/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/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/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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.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/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/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/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</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 399e94d..93a5847 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,8 +248,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/RESTServer.html b/devapidocs/org/apache/hadoop/hbase/rest/RESTServer.html
index 2a9f231..6a7f7e8 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/RESTServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/RESTServer.html
@@ -486,7 +486,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>conf</h4>
-<pre>public static org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.106">conf</a></pre>
+<pre>public static org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.109">conf</a></pre>
</li>
</ul>
<a name="userProvider">
@@ -495,7 +495,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>userProvider</h4>
-<pre>private final <a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.107">userProvider</a></pre>
+<pre>private final <a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.110">userProvider</a></pre>
</li>
</ul>
<a name="server">
@@ -504,7 +504,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>server</h4>
-<pre>private org.eclipse.jetty.server.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.108">server</a></pre>
+<pre>private org.eclipse.jetty.server.Server <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.111">server</a></pre>
</li>
</ul>
<a name="infoServer">
@@ -513,7 +513,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockListLast">
<li class="blockList">
<h4>infoServer</h4>
-<pre>private <a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.109">infoServer</a></pre>
+<pre>private <a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.112">infoServer</a></pre>
</li>
</ul>
</li>
@@ -530,7 +530,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockListLast">
<li class="blockList">
<h4>RESTServer</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.111">RESTServer</a>(org.apache.hadoop.conf.Configuration conf)</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.114">RESTServer</a>(org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
</li>
@@ -547,7 +547,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>printUsageAndExit</h4>
-<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.116">printUsageAndExit</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.Options options,
+<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.119">printUsageAndExit</a>(org.apache.hbase.thirdparty.org.apache.commons.cli.Options options,
int exitCode)</pre>
</li>
</ul>
@@ -557,7 +557,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>addCSRFFilter</h4>
-<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.124">addCSRFFilter</a>(org.eclipse.jetty.servlet.ServletContextHandler ctxHandler,
+<pre>void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.127">addCSRFFilter</a>(org.eclipse.jetty.servlet.ServletContextHandler ctxHandler,
org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
@@ -567,7 +567,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>loginServerPrincipal</h4>
-<pre>private static <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.eclipse.jetty.servlet.FilterHolder,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends org.glassfish.jersey.servlet.ServletContainer>> <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.138">loginS [...]
+<pre>private static <a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><org.eclipse.jetty.servlet.FilterHolder,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a><? extends org.glassfish.jersey.servlet.ServletContainer>> <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.141">loginS [...]
org.apache.hadoop.conf.Configuration conf)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
@@ -582,7 +582,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>parseCommandLine</h4>
-<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.166">parseCommandLine</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args,
+<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.169">parseCommandLine</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args,
org.apache.hadoop.conf.Configuration conf)</pre>
</li>
</ul>
@@ -592,7 +592,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>run</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.233">run</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.236">run</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Runs the REST server.</div>
<dl>
@@ -607,7 +607,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>join</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.370">join</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.373">join</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -621,7 +621,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>stop</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.377">stop</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.380">stop</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -635,7 +635,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>getPort</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.386">getPort</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.389">getPort</a>()</pre>
</li>
</ul>
<a name="getInfoPort--">
@@ -644,7 +644,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>getInfoPort</h4>
-<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.394">getInfoPort</a>()</pre>
+<pre>public int <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.397">getInfoPort</a>()</pre>
</li>
</ul>
<a name="getConf--">
@@ -653,7 +653,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockList">
<li class="blockList">
<h4>getConf</h4>
-<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.401">getConf</a>()</pre>
+<pre>public org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.404">getConf</a>()</pre>
</li>
</ul>
<a name="main-java.lang.String:A-">
@@ -662,7 +662,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/rest/Constants.html"
<ul class="blockListLast">
<li class="blockList">
<h4>main</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.410">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/rest/RESTServer.html#line.413">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">The main method for the HBase rest server.</div>
<dl>
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 03348f4..009a61b 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -137,10 +137,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 4e8112b..c11e5b8 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,8 +192,8 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 82c818f..47e3265 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -207,9 +207,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
+<li type="circle">org.apache.hadoop.hbase.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 65ac4da..ed9598f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -545,14 +545,14 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/IdReadWriteLock.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLock.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a><T>)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
</ul>
</li>
</ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 4346ec4..7b5e651 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
<span class="sourceLineNo">010</span> public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
<span class="sourceLineNo">011</span> public static final String revision = "";<a name="line.11"></a>
<span class="sourceLineNo">012</span> public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span> public static final String date = "Tue Mar 5 14:34:30 UTC 2019";<a name="line.13"></a>
+<span class="sourceLineNo">013</span> public static final String date = "Wed Mar 6 14:34:26 UTC 2019";<a name="line.13"></a>
<span class="sourceLineNo">014</span> public static final String url = "git://jenkins-websites1.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span> public static final String srcChecksum = "0d461d01d68fa5b007aa444e9f783a3b";<a name="line.15"></a>
+<span class="sourceLineNo">015</span> public static final String srcChecksum = "5a841dab93e365e2d1d2f6503246cc1b";<a name="line.15"></a>
<span class="sourceLineNo">016</span>}<a name="line.16"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
index 47325cd..b16e963 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.Counters.html
@@ -122,638 +122,654 @@
<span class="sourceLineNo">114</span> String peerFSAddress = null;<a name="line.114"></a>
<span class="sourceLineNo">115</span> //Peer cluster HBase root dir location<a name="line.115"></a>
<span class="sourceLineNo">116</span> String peerHBaseRootAddress = null;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span> private final static String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.119"></a>
+<span class="sourceLineNo">117</span> //Peer Table Name<a name="line.117"></a>
+<span class="sourceLineNo">118</span> String peerTableName = null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * Map-only comparator for 2 tables<a name="line.122"></a>
-<span class="sourceLineNo">123</span> */<a name="line.123"></a>
-<span class="sourceLineNo">124</span> public static class Verifier<a name="line.124"></a>
-<span class="sourceLineNo">125</span> extends TableMapper<ImmutableBytesWritable, Put> {<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span> public enum Counters {<a name="line.127"></a>
-<span class="sourceLineNo">128</span> GOODROWS, BADROWS, ONLY_IN_SOURCE_TABLE_ROWS, ONLY_IN_PEER_TABLE_ROWS, CONTENT_DIFFERENT_ROWS<a name="line.128"></a>
-<span class="sourceLineNo">129</span> }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span> private Connection sourceConnection;<a name="line.131"></a>
-<span class="sourceLineNo">132</span> private Table sourceTable;<a name="line.132"></a>
-<span class="sourceLineNo">133</span> private Connection replicatedConnection;<a name="line.133"></a>
-<span class="sourceLineNo">134</span> private Table replicatedTable;<a name="line.134"></a>
-<span class="sourceLineNo">135</span> private ResultScanner replicatedScanner;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> private Result currentCompareRowInPeerTable;<a name="line.136"></a>
-<span class="sourceLineNo">137</span> private int sleepMsBeforeReCompare;<a name="line.137"></a>
-<span class="sourceLineNo">138</span> private String delimiter = "";<a name="line.138"></a>
-<span class="sourceLineNo">139</span> private boolean verbose = false;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> private int batch = -1;<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> * Map method that compares every scanned row with the equivalent from<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * a distant cluster.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> * @param row The current table row key.<a name="line.145"></a>
-<span class="sourceLineNo">146</span> * @param value The columns.<a name="line.146"></a>
-<span class="sourceLineNo">147</span> * @param context The current context.<a name="line.147"></a>
-<span class="sourceLineNo">148</span> * @throws IOException When something is broken with the data.<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 map(ImmutableBytesWritable row, final Result value,<a name="line.151"></a>
-<span class="sourceLineNo">152</span> Context context)<a name="line.152"></a>
-<span class="sourceLineNo">153</span> throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> if (replicatedScanner == null) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span> Configuration conf = context.getConfiguration();<a name="line.155"></a>
-<span class="sourceLineNo">156</span> sleepMsBeforeReCompare = conf.getInt(NAME +".sleepMsBeforeReCompare", 0);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> delimiter = conf.get(NAME + ".delimiter", "");<a name="line.157"></a>
-<span class="sourceLineNo">158</span> verbose = conf.getBoolean(NAME +".verbose", false);<a name="line.158"></a>
-<span class="sourceLineNo">159</span> batch = conf.getInt(NAME + ".batch", -1);<a name="line.159"></a>
-<span class="sourceLineNo">160</span> final Scan scan = new Scan();<a name="line.160"></a>
-<span class="sourceLineNo">161</span> if (batch > 0) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> scan.setBatch(batch);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span> scan.setCacheBlocks(false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> scan.setCaching(conf.getInt(TableInputFormat.SCAN_CACHEDROWS, 1));<a name="line.165"></a>
-<span class="sourceLineNo">166</span> long startTime = conf.getLong(NAME + ".startTime", 0);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> long endTime = conf.getLong(NAME + ".endTime", Long.MAX_VALUE);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> String families = conf.get(NAME + ".families", null);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> if(families != null) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> String[] fams = families.split(",");<a name="line.170"></a>
-<span class="sourceLineNo">171</span> for(String fam : fams) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.172"></a>
-<span class="sourceLineNo">173</span> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> boolean includeDeletedCells = conf.getBoolean(NAME + ".includeDeletedCells", false);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> scan.setRaw(includeDeletedCells);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> String rowPrefixes = conf.get(NAME + ".rowPrefixes", null);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> scan.setTimeRange(startTime, endTime);<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int versions = conf.getInt(NAME+".versions", -1);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> LOG.info("Setting number of version inside map as: " + versions);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> if (versions >= 0) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> scan.setMaxVersions(versions);<a name="line.183"></a>
-<span class="sourceLineNo">184</span> }<a name="line.184"></a>
-<span class="sourceLineNo">185</span> TableName tableName = TableName.valueOf(conf.get(NAME + ".tableName"));<a name="line.185"></a>
-<span class="sourceLineNo">186</span> sourceConnection = ConnectionFactory.createConnection(conf);<a name="line.186"></a>
-<span class="sourceLineNo">187</span> sourceTable = sourceConnection.getTable(tableName);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> final InputSplit tableSplit = context.getInputSplit();<a name="line.189"></a>
+<span class="sourceLineNo">121</span> private final static String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span> * Map-only comparator for 2 tables<a name="line.124"></a>
+<span class="sourceLineNo">125</span> */<a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static class Verifier<a name="line.126"></a>
+<span class="sourceLineNo">127</span> extends TableMapper<ImmutableBytesWritable, Put> {<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public enum Counters {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> GOODROWS, BADROWS, ONLY_IN_SOURCE_TABLE_ROWS, ONLY_IN_PEER_TABLE_ROWS, CONTENT_DIFFERENT_ROWS<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> private Connection sourceConnection;<a name="line.133"></a>
+<span class="sourceLineNo">134</span> private Table sourceTable;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> private Connection replicatedConnection;<a name="line.135"></a>
+<span class="sourceLineNo">136</span> private Table replicatedTable;<a name="line.136"></a>
+<span class="sourceLineNo">137</span> private ResultScanner replicatedScanner;<a name="line.137"></a>
+<span class="sourceLineNo">138</span> private Result currentCompareRowInPeerTable;<a name="line.138"></a>
+<span class="sourceLineNo">139</span> private int sleepMsBeforeReCompare;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> private String delimiter = "";<a name="line.140"></a>
+<span class="sourceLineNo">141</span> private boolean verbose = false;<a name="line.141"></a>
+<span class="sourceLineNo">142</span> private int batch = -1;<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span> /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span> * Map method that compares every scanned row with the equivalent from<a name="line.145"></a>
+<span class="sourceLineNo">146</span> * a distant cluster.<a name="line.146"></a>
+<span class="sourceLineNo">147</span> * @param row The current table row key.<a name="line.147"></a>
+<span class="sourceLineNo">148</span> * @param value The columns.<a name="line.148"></a>
+<span class="sourceLineNo">149</span> * @param context The current context.<a name="line.149"></a>
+<span class="sourceLineNo">150</span> * @throws IOException When something is broken with the data.<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 map(ImmutableBytesWritable row, final Result value,<a name="line.153"></a>
+<span class="sourceLineNo">154</span> Context context)<a name="line.154"></a>
+<span class="sourceLineNo">155</span> throws IOException {<a name="line.155"></a>
+<span class="sourceLineNo">156</span> if (replicatedScanner == null) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> Configuration conf = context.getConfiguration();<a name="line.157"></a>
+<span class="sourceLineNo">158</span> sleepMsBeforeReCompare = conf.getInt(NAME +".sleepMsBeforeReCompare", 0);<a name="line.158"></a>
+<span class="sourceLineNo">159</span> delimiter = conf.get(NAME + ".delimiter", "");<a name="line.159"></a>
+<span class="sourceLineNo">160</span> verbose = conf.getBoolean(NAME +".verbose", false);<a name="line.160"></a>
+<span class="sourceLineNo">161</span> batch = conf.getInt(NAME + ".batch", -1);<a name="line.161"></a>
+<span class="sourceLineNo">162</span> final Scan scan = new Scan();<a name="line.162"></a>
+<span class="sourceLineNo">163</span> if (batch > 0) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> scan.setBatch(batch);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> }<a name="line.165"></a>
+<span class="sourceLineNo">166</span> scan.setCacheBlocks(false);<a name="line.166"></a>
+<span class="sourceLineNo">167</span> scan.setCaching(conf.getInt(TableInputFormat.SCAN_CACHEDROWS, 1));<a name="line.167"></a>
+<span class="sourceLineNo">168</span> long startTime = conf.getLong(NAME + ".startTime", 0);<a name="line.168"></a>
+<span class="sourceLineNo">169</span> long endTime = conf.getLong(NAME + ".endTime", Long.MAX_VALUE);<a name="line.169"></a>
+<span class="sourceLineNo">170</span> String families = conf.get(NAME + ".families", null);<a name="line.170"></a>
+<span class="sourceLineNo">171</span> if(families != null) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span> String[] fams = families.split(",");<a name="line.172"></a>
+<span class="sourceLineNo">173</span> for(String fam : fams) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.174"></a>
+<span class="sourceLineNo">175</span> }<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span> boolean includeDeletedCells = conf.getBoolean(NAME + ".includeDeletedCells", false);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> scan.setRaw(includeDeletedCells);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> String rowPrefixes = conf.get(NAME + ".rowPrefixes", null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> scan.setTimeRange(startTime, endTime);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> int versions = conf.getInt(NAME+".versions", -1);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> LOG.info("Setting number of version inside map as: " + versions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span> if (versions >= 0) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span> scan.setMaxVersions(versions);<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span> TableName tableName = TableName.valueOf(conf.get(NAME + ".tableName"));<a name="line.187"></a>
+<span class="sourceLineNo">188</span> sourceConnection = ConnectionFactory.createConnection(conf);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> sourceTable = sourceConnection.getTable(tableName);<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span> String zkClusterKey = conf.get(NAME + ".peerQuorumAddress");<a name="line.191"></a>
-<span class="sourceLineNo">192</span> Configuration peerConf = HBaseConfiguration.createClusterConf(conf,<a name="line.192"></a>
-<span class="sourceLineNo">193</span> zkClusterKey, PEER_CONFIG_PREFIX);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> replicatedConnection = ConnectionFactory.createConnection(peerConf);<a name="line.195"></a>
-<span class="sourceLineNo">196</span> replicatedTable = replicatedConnection.getTable(tableName);<a name="line.196"></a>
-<span class="sourceLineNo">197</span> scan.setStartRow(value.getRow());<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span> byte[] endRow = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span> if (tableSplit instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> endRow = ((TableSnapshotInputFormat.TableSnapshotRegionSplit) tableSplit).getRegionInfo()<a name="line.201"></a>
-<span class="sourceLineNo">202</span> .getEndKey();<a name="line.202"></a>
-<span class="sourceLineNo">203</span> } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> endRow = ((TableSplit) tableSplit).getEndRow();<a name="line.204"></a>
-<span class="sourceLineNo">205</span> }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> scan.setStopRow(endRow);<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> String peerSnapshotName = conf.get(NAME + ".peerSnapshotName", null);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> if (peerSnapshotName != null) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> String peerSnapshotTmpDir = conf.get(NAME + ".peerSnapshotTmpDir", null);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> String peerFSAddress = conf.get(NAME + ".peerFSAddress", null);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> String peerHBaseRootAddress = conf.get(NAME + ".peerHBaseRootAddress", null);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> FSUtils.setRootDir(peerConf, new Path(peerHBaseRootAddress));<a name="line.215"></a>
-<span class="sourceLineNo">216</span> LOG.info("Using peer snapshot:" + peerSnapshotName + " with temp dir:"<a name="line.216"></a>
-<span class="sourceLineNo">217</span> + peerSnapshotTmpDir + " peer root uri:" + FSUtils.getRootDir(peerConf)<a name="line.217"></a>
-<span class="sourceLineNo">218</span> + " peerFSAddress:" + peerFSAddress);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span> replicatedScanner = new TableSnapshotScanner(peerConf, FSUtils.getRootDir(peerConf),<a name="line.220"></a>
-<span class="sourceLineNo">221</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName, scan, true);<a name="line.221"></a>
-<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> replicatedScanner = replicatedTable.getScanner(scan);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.225"></a>
-<span class="sourceLineNo">226</span> }<a name="line.226"></a>
-<span class="sourceLineNo">227</span> while (true) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> if (currentCompareRowInPeerTable == null) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span> // reach the region end of peer table, row only in source table<a name="line.229"></a>
-<span class="sourceLineNo">230</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.230"></a>
-<span class="sourceLineNo">231</span> break;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> }<a name="line.232"></a>
-<span class="sourceLineNo">233</span> int rowCmpRet = Bytes.compareTo(value.getRow(), currentCompareRowInPeerTable.getRow());<a name="line.233"></a>
-<span class="sourceLineNo">234</span> if (rowCmpRet == 0) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> // rowkey is same, need to compare the content of the row<a name="line.235"></a>
-<span class="sourceLineNo">236</span> try {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> Result.compareResults(value, currentCompareRowInPeerTable);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> if (verbose) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span> LOG.info("Good row key: " + delimiter<a name="line.240"></a>
-<span class="sourceLineNo">241</span> + Bytes.toStringBinary(value.getRow()) + delimiter);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> } catch (Exception e) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> logFailRowAndIncreaseCounter(context, Counters.CONTENT_DIFFERENT_ROWS, value);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.246"></a>
-<span class="sourceLineNo">247</span> break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else if (rowCmpRet < 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> // row only exists in source table<a name="line.249"></a>
-<span class="sourceLineNo">250</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.250"></a>
+<span class="sourceLineNo">191</span> final InputSplit tableSplit = context.getInputSplit();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span> String zkClusterKey = conf.get(NAME + ".peerQuorumAddress");<a name="line.193"></a>
+<span class="sourceLineNo">194</span> Configuration peerConf = HBaseConfiguration.createClusterConf(conf,<a name="line.194"></a>
+<span class="sourceLineNo">195</span> zkClusterKey, PEER_CONFIG_PREFIX);<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> String peerName = peerConf.get(NAME + ".peerTableName", tableName.getNameAsString());<a name="line.197"></a>
+<span class="sourceLineNo">198</span> TableName peerTableName = TableName.valueOf(peerName);<a name="line.198"></a>
+<span class="sourceLineNo">199</span> replicatedConnection = ConnectionFactory.createConnection(peerConf);<a name="line.199"></a>
+<span class="sourceLineNo">200</span> replicatedTable = replicatedConnection.getTable(peerTableName);<a name="line.200"></a>
+<span class="sourceLineNo">201</span> scan.setStartRow(value.getRow());<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span> byte[] endRow = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span> if (tableSplit instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> endRow = ((TableSnapshotInputFormat.TableSnapshotRegionSplit) tableSplit).getRegionInfo()<a name="line.205"></a>
+<span class="sourceLineNo">206</span> .getEndKey();<a name="line.206"></a>
+<span class="sourceLineNo">207</span> } else {<a name="line.207"></a>
+<span class="sourceLineNo">208</span> endRow = ((TableSplit) tableSplit).getEndRow();<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> scan.setStopRow(endRow);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> String peerSnapshotName = conf.get(NAME + ".peerSnapshotName", null);<a name="line.213"></a>
+<span class="sourceLineNo">214</span> if (peerSnapshotName != null) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> String peerSnapshotTmpDir = conf.get(NAME + ".peerSnapshotTmpDir", null);<a name="line.215"></a>
+<span class="sourceLineNo">216</span> String peerFSAddress = conf.get(NAME + ".peerFSAddress", null);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> String peerHBaseRootAddress = conf.get(NAME + ".peerHBaseRootAddress", null);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> FSUtils.setRootDir(peerConf, new Path(peerHBaseRootAddress));<a name="line.219"></a>
+<span class="sourceLineNo">220</span> LOG.info("Using peer snapshot:" + peerSnapshotName + " with temp dir:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span> + peerSnapshotTmpDir + " peer root uri:" + FSUtils.getRootDir(peerConf)<a name="line.221"></a>
+<span class="sourceLineNo">222</span> + " peerFSAddress:" + peerFSAddress);<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> replicatedScanner = new TableSnapshotScanner(peerConf, FSUtils.getRootDir(peerConf),<a name="line.224"></a>
+<span class="sourceLineNo">225</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName, scan, true);<a name="line.225"></a>
+<span class="sourceLineNo">226</span> } else {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> replicatedScanner = replicatedTable.getScanner(scan);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">229</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.229"></a>
+<span class="sourceLineNo">230</span> }<a name="line.230"></a>
+<span class="sourceLineNo">231</span> while (true) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> if (currentCompareRowInPeerTable == null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // reach the region end of peer table, row only in source table<a name="line.233"></a>
+<span class="sourceLineNo">234</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> }<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int rowCmpRet = Bytes.compareTo(value.getRow(), currentCompareRowInPeerTable.getRow());<a name="line.237"></a>
+<span class="sourceLineNo">238</span> if (rowCmpRet == 0) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span> // rowkey is same, need to compare the content of the row<a name="line.239"></a>
+<span class="sourceLineNo">240</span> try {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> Result.compareResults(value, currentCompareRowInPeerTable);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.242"></a>
+<span class="sourceLineNo">243</span> if (verbose) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> LOG.info("Good row key: " + delimiter<a name="line.244"></a>
+<span class="sourceLineNo">245</span> + Bytes.toStringBinary(value.getRow()) + delimiter);<a name="line.245"></a>
+<span class="sourceLineNo">246</span> }<a name="line.246"></a>
+<span class="sourceLineNo">247</span> } catch (Exception e) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> logFailRowAndIncreaseCounter(context, Counters.CONTENT_DIFFERENT_ROWS, value);<a name="line.248"></a>
+<span class="sourceLineNo">249</span> }<a name="line.249"></a>
+<span class="sourceLineNo">250</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.250"></a>
<span class="sourceLineNo">251</span> break;<a name="line.251"></a>
-<span class="sourceLineNo">252</span> } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> // row only exists in peer table<a name="line.253"></a>
-<span class="sourceLineNo">254</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> currentCompareRowInPeerTable);<a name="line.255"></a>
-<span class="sourceLineNo">256</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span> }<a name="line.258"></a>
-<span class="sourceLineNo">259</span> }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span> private void logFailRowAndIncreaseCounter(Context context, Counters counter, Result row) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span> if (sleepMsBeforeReCompare > 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> Threads.sleep(sleepMsBeforeReCompare);<a name="line.263"></a>
-<span class="sourceLineNo">264</span> try {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> Result sourceResult = sourceTable.get(new Get(row.getRow()));<a name="line.265"></a>
-<span class="sourceLineNo">266</span> Result replicatedResult = replicatedTable.get(new Get(row.getRow()));<a name="line.266"></a>
-<span class="sourceLineNo">267</span> Result.compareResults(sourceResult, replicatedResult);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> if (!sourceResult.isEmpty()) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (verbose) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> LOG.info("Good row key (with recompare): " + delimiter + Bytes.toStringBinary(row.getRow())<a name="line.271"></a>
-<span class="sourceLineNo">272</span> + delimiter);<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> return;<a name="line.275"></a>
-<span class="sourceLineNo">276</span> } catch (Exception e) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> LOG.error("recompare fail after sleep, rowkey=" + delimiter +<a name="line.277"></a>
-<span class="sourceLineNo">278</span> Bytes.toStringBinary(row.getRow()) + delimiter);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> }<a name="line.280"></a>
-<span class="sourceLineNo">281</span> context.getCounter(counter).increment(1);<a name="line.281"></a>
-<span class="sourceLineNo">282</span> context.getCounter(Counters.BADROWS).increment(1);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> LOG.error(counter.toString() + ", rowkey=" + delimiter + Bytes.toStringBinary(row.getRow()) +<a name="line.283"></a>
-<span class="sourceLineNo">284</span> delimiter);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span> @Override<a name="line.287"></a>
-<span class="sourceLineNo">288</span> protected void cleanup(Context context) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span> if (replicatedScanner != null) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> try {<a name="line.290"></a>
-<span class="sourceLineNo">291</span> while (currentCompareRowInPeerTable != null) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.292"></a>
-<span class="sourceLineNo">293</span> currentCompareRowInPeerTable);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> } catch (Exception e) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> LOG.error("fail to scan peer table in cleanup", e);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> } finally {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> replicatedScanner.close();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> replicatedScanner = null;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> }<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span> if (sourceTable != null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span> try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span> sourceTable.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> LOG.error("fail to close source table in cleanup", e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span> if(sourceConnection != null){<a name="line.311"></a>
-<span class="sourceLineNo">312</span> try {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> sourceConnection.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span> } catch (Exception e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> LOG.error("fail to close source connection in cleanup", e);<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> if(replicatedTable != null){<a name="line.319"></a>
-<span class="sourceLineNo">320</span> try{<a name="line.320"></a>
-<span class="sourceLineNo">321</span> replicatedTable.close();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> } catch (Exception e) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> LOG.error("fail to close replicated table in cleanup", e);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> }<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> if(replicatedConnection != null){<a name="line.326"></a>
-<span class="sourceLineNo">327</span> try {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> replicatedConnection.close();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (Exception e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.error("fail to close replicated connection in cleanup", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<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> }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> private static Pair<ReplicationPeerConfig, Configuration> getPeerQuorumConfig(<a name="line.336"></a>
-<span class="sourceLineNo">337</span> final Configuration conf, String peerId) throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ZKWatcher localZKW = null;<a name="line.338"></a>
-<span class="sourceLineNo">339</span> try {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> localZKW = new ZKWatcher(conf, "VerifyReplication", new Abortable() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public void abort(String why, Throwable e) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">252</span> } else if (rowCmpRet < 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span> // row only exists in source table<a name="line.253"></a>
+<span class="sourceLineNo">254</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.254"></a>
+<span class="sourceLineNo">255</span> break;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> // row only exists in peer table<a name="line.257"></a>
+<span class="sourceLineNo">258</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.258"></a>
+<span class="sourceLineNo">259</span> currentCompareRowInPeerTable);<a name="line.259"></a>
+<span class="sourceLineNo">260</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.260"></a>
+<span class="sourceLineNo">261</span> }<a name="line.261"></a>
+<span class="sourceLineNo">262</span> }<a name="line.262"></a>
+<span class="sourceLineNo">263</span> }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span> private void logFailRowAndIncreaseCounter(Context context, Counters counter, Result row) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> if (sleepMsBeforeReCompare > 0) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> Threads.sleep(sleepMsBeforeReCompare);<a name="line.267"></a>
+<span class="sourceLineNo">268</span> try {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> Result sourceResult = sourceTable.get(new Get(row.getRow()));<a name="line.269"></a>
+<span class="sourceLineNo">270</span> Result replicatedResult = replicatedTable.get(new Get(row.getRow()));<a name="line.270"></a>
+<span class="sourceLineNo">271</span> Result.compareResults(sourceResult, replicatedResult);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> if (!sourceResult.isEmpty()) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (verbose) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> LOG.info("Good row key (with recompare): " + delimiter + Bytes.toStringBinary(row.getRow())<a name="line.275"></a>
+<span class="sourceLineNo">276</span> + delimiter);<a name="line.276"></a>
+<span class="sourceLineNo">277</span> }<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span> return;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> } catch (Exception e) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> LOG.error("recompare fail after sleep, rowkey=" + delimiter +<a name="line.281"></a>
+<span class="sourceLineNo">282</span> Bytes.toStringBinary(row.getRow()) + delimiter);<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> context.getCounter(counter).increment(1);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> context.getCounter(Counters.BADROWS).increment(1);<a name="line.286"></a>
+<span class="sourceLineNo">287</span> LOG.error(counter.toString() + ", rowkey=" + delimiter + Bytes.toStringBinary(row.getRow()) +<a name="line.287"></a>
+<span class="sourceLineNo">288</span> delimiter);<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> protected void cleanup(Context context) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> if (replicatedScanner != null) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span> while (currentCompareRowInPeerTable != null) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.296"></a>
+<span class="sourceLineNo">297</span> currentCompareRowInPeerTable);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.298"></a>
+<span class="sourceLineNo">299</span> }<a name="line.299"></a>
+<span class="sourceLineNo">300</span> } catch (Exception e) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> LOG.error("fail to scan peer table in cleanup", e);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> } finally {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> replicatedScanner.close();<a name="line.303"></a>
+<span class="sourceLineNo">304</span> replicatedScanner = null;<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span> }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (sourceTable != null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> try {<a name="line.309"></a>
+<span class="sourceLineNo">310</span> sourceTable.close();<a name="line.310"></a>
+<span class="sourceLineNo">311</span> } catch (IOException e) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> LOG.error("fail to close source table in cleanup", e);<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> if(sourceConnection != null){<a name="line.315"></a>
+<span class="sourceLineNo">316</span> try {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> sourceConnection.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span> } catch (Exception e) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span> LOG.error("fail to close source connection in cleanup", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> }<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span> if(replicatedTable != null){<a name="line.323"></a>
+<span class="sourceLineNo">324</span> try{<a name="line.324"></a>
+<span class="sourceLineNo">325</span> replicatedTable.close();<a name="line.325"></a>
+<span class="sourceLineNo">326</span> } catch (Exception e) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> LOG.error("fail to close replicated table in cleanup", e);<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> if(replicatedConnection != null){<a name="line.330"></a>
+<span class="sourceLineNo">331</span> try {<a name="line.331"></a>
+<span class="sourceLineNo">332</span> replicatedConnection.close();<a name="line.332"></a>
+<span class="sourceLineNo">333</span> } catch (Exception e) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span> LOG.error("fail to close replicated connection in cleanup", e);<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> }<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private static Pair<ReplicationPeerConfig, Configuration> getPeerQuorumConfig(<a name="line.340"></a>
+<span class="sourceLineNo">341</span> final Configuration conf, String peerId) throws IOException {<a name="line.341"></a>
+<span class="sourceLineNo">342</span> ZKWatcher localZKW = null;<a name="line.342"></a>
+<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> localZKW = new ZKWatcher(conf, "VerifyReplication", new Abortable() {<a name="line.344"></a>
<span class="sourceLineNo">345</span> @Override<a name="line.345"></a>
-<span class="sourceLineNo">346</span> public boolean isAborted() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> return false;<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> });<a name="line.349"></a>
-<span class="sourceLineNo">350</span> ReplicationPeerStorage storage =<a name="line.350"></a>
-<span class="sourceLineNo">351</span> ReplicationStorageFactory.getReplicationPeerStorage(localZKW, conf);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> ReplicationPeerConfig peerConfig = storage.getPeerConfig(peerId);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return Pair.newPair(peerConfig,<a name="line.353"></a>
-<span class="sourceLineNo">354</span> ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf));<a name="line.354"></a>
-<span class="sourceLineNo">355</span> } catch (ReplicationException e) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span> throw new IOException("An error occurred while trying to connect to the remote peer cluster",<a name="line.356"></a>
-<span class="sourceLineNo">357</span> e);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> } finally {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> if (localZKW != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span> localZKW.close();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> }<a name="line.362"></a>
-<span class="sourceLineNo">363</span> }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> private void restoreSnapshotForPeerCluster(Configuration conf, String peerQuorumAddress)<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span> Configuration peerConf =<a name="line.367"></a>
-<span class="sourceLineNo">368</span> HBaseConfiguration.createClusterConf(conf, peerQuorumAddress, PEER_CONFIG_PREFIX);<a name="line.368"></a>
-<span class="sourceLineNo">369</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.369"></a>
-<span class="sourceLineNo">370</span> FSUtils.setRootDir(peerConf, new Path(peerFSAddress, peerHBaseRootAddress));<a name="line.370"></a>
-<span class="sourceLineNo">371</span> FileSystem fs = FileSystem.get(peerConf);<a name="line.371"></a>
-<span class="sourceLineNo">372</span> RestoreSnapshotHelper.copySnapshotForScanner(peerConf, fs, FSUtils.getRootDir(peerConf),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName);<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span> * Sets up the actual job.<a name="line.377"></a>
-<span class="sourceLineNo">378</span> *<a name="line.378"></a>
-<span class="sourceLineNo">379</span> * @param conf The current configuration.<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * @param args The command line parameters.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * @return The newly created job.<a name="line.381"></a>
-<span class="sourceLineNo">382</span> * @throws java.io.IOException When setting up the job fails.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> */<a name="line.383"></a>
-<span class="sourceLineNo">384</span> public Job createSubmittableJob(Configuration conf, String[] args)<a name="line.384"></a>
-<span class="sourceLineNo">385</span> throws IOException {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> if (!doCommandLine(args)) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return null;<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span> conf.set(NAME+".tableName", tableName);<a name="line.389"></a>
-<span class="sourceLineNo">390</span> conf.setLong(NAME+".startTime", startTime);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> conf.setLong(NAME+".endTime", endTime);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> conf.setInt(NAME +".sleepMsBeforeReCompare", sleepMsBeforeReCompare);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> conf.set(NAME + ".delimiter", delimiter);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> conf.setInt(NAME + ".batch", batch);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> conf.setBoolean(NAME +".verbose", verbose);<a name="line.395"></a>
-<span class="sourceLineNo">396</span> conf.setBoolean(NAME +".includeDeletedCells", includeDeletedCells);<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (families != null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span> conf.set(NAME+".families", families);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (rowPrefixes != null){<a name="line.400"></a>
-<span class="sourceLineNo">401</span> conf.set(NAME+".rowPrefixes", rowPrefixes);<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> String peerQuorumAddress;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> Pair<ReplicationPeerConfig, Configuration> peerConfigPair = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> if (peerId != null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> peerConfigPair = getPeerQuorumConfig(conf, peerId);<a name="line.407"></a>
-<span class="sourceLineNo">408</span> ReplicationPeerConfig peerConfig = peerConfigPair.getFirst();<a name="line.408"></a>
-<span class="sourceLineNo">409</span> peerQuorumAddress = peerConfig.getClusterKey();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress + ", Peer Configuration: " +<a name="line.410"></a>
-<span class="sourceLineNo">411</span> peerConfig.getConfiguration());<a name="line.411"></a>
-<span class="sourceLineNo">412</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.412"></a>
-<span class="sourceLineNo">413</span> HBaseConfiguration.setWithPrefix(conf, PEER_CONFIG_PREFIX,<a name="line.413"></a>
-<span class="sourceLineNo">414</span> peerConfig.getConfiguration().entrySet());<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> assert this.peerQuorumAddress != null;<a name="line.416"></a>
-<span class="sourceLineNo">417</span> peerQuorumAddress = this.peerQuorumAddress;<a name="line.417"></a>
-<span class="sourceLineNo">418</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress);<a name="line.418"></a>
-<span class="sourceLineNo">419</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> conf.setInt(NAME + ".versions", versions);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> LOG.info("Number of version: " + versions);<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> //Set Snapshot specific parameters<a name="line.425"></a>
-<span class="sourceLineNo">426</span> if (peerSnapshotName != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> conf.set(NAME + ".peerSnapshotName", peerSnapshotName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span> // for verifyRep by snapshot, choose a unique sub-directory under peerSnapshotTmpDir to<a name="line.429"></a>
-<span class="sourceLineNo">430</span> // restore snapshot.<a name="line.430"></a>
-<span class="sourceLineNo">431</span> Path restoreDir = new Path(peerSnapshotTmpDir, UUID.randomUUID().toString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span> peerSnapshotTmpDir = restoreDir.toString();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> conf.set(NAME + ".peerSnapshotTmpDir", peerSnapshotTmpDir);<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> conf.set(NAME + ".peerFSAddress", peerFSAddress);<a name="line.435"></a>
-<span class="sourceLineNo">436</span> conf.set(NAME + ".peerHBaseRootAddress", peerHBaseRootAddress);<a name="line.436"></a>
+<span class="sourceLineNo">346</span> public void abort(String why, Throwable e) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span> public boolean isAborted() {<a name="line.350"></a>
+<span class="sourceLineNo">351</span> return false;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> });<a name="line.353"></a>
+<span class="sourceLineNo">354</span> ReplicationPeerStorage storage =<a name="line.354"></a>
+<span class="sourceLineNo">355</span> ReplicationStorageFactory.getReplicationPeerStorage(localZKW, conf);<a name="line.355"></a>
+<span class="sourceLineNo">356</span> ReplicationPeerConfig peerConfig = storage.getPeerConfig(peerId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return Pair.newPair(peerConfig,<a name="line.357"></a>
+<span class="sourceLineNo">358</span> ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf));<a name="line.358"></a>
+<span class="sourceLineNo">359</span> } catch (ReplicationException e) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> throw new IOException("An error occurred while trying to connect to the remote peer cluster",<a name="line.360"></a>
+<span class="sourceLineNo">361</span> e);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> } finally {<a name="line.362"></a>
+<span class="sourceLineNo">363</span> if (localZKW != null) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> localZKW.close();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span> private void restoreSnapshotForPeerCluster(Configuration conf, String peerQuorumAddress)<a name="line.369"></a>
+<span class="sourceLineNo">370</span> throws IOException {<a name="line.370"></a>
+<span class="sourceLineNo">371</span> Configuration peerConf =<a name="line.371"></a>
+<span class="sourceLineNo">372</span> HBaseConfiguration.createClusterConf(conf, peerQuorumAddress, PEER_CONFIG_PREFIX);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> FSUtils.setRootDir(peerConf, new Path(peerFSAddress, peerHBaseRootAddress));<a name="line.374"></a>
+<span class="sourceLineNo">375</span> FileSystem fs = FileSystem.get(peerConf);<a name="line.375"></a>
+<span class="sourceLineNo">376</span> RestoreSnapshotHelper.copySnapshotForScanner(peerConf, fs, FSUtils.getRootDir(peerConf),<a name="line.376"></a>
+<span class="sourceLineNo">377</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName);<a name="line.377"></a>
+<span class="sourceLineNo">378</span> }<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> * Sets up the actual job.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> *<a name="line.382"></a>
+<span class="sourceLineNo">383</span> * @param conf The current configuration.<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * @param args The command line parameters.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * @return The newly created job.<a name="line.385"></a>
+<span class="sourceLineNo">386</span> * @throws java.io.IOException When setting up the job fails.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> */<a name="line.387"></a>
+<span class="sourceLineNo">388</span> public Job createSubmittableJob(Configuration conf, String[] args)<a name="line.388"></a>
+<span class="sourceLineNo">389</span> throws IOException {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> if (!doCommandLine(args)) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> return null;<a name="line.391"></a>
+<span class="sourceLineNo">392</span> }<a name="line.392"></a>
+<span class="sourceLineNo">393</span> conf.set(NAME+".tableName", tableName);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> conf.setLong(NAME+".startTime", startTime);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> conf.setLong(NAME+".endTime", endTime);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> conf.setInt(NAME +".sleepMsBeforeReCompare", sleepMsBeforeReCompare);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> conf.set(NAME + ".delimiter", delimiter);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> conf.setInt(NAME + ".batch", batch);<a name="line.398"></a>
+<span class="sourceLineNo">399</span> conf.setBoolean(NAME +".verbose", verbose);<a name="line.399"></a>
+<span class="sourceLineNo">400</span> conf.setBoolean(NAME +".includeDeletedCells", includeDeletedCells);<a name="line.400"></a>
+<span class="sourceLineNo">401</span> if (families != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> conf.set(NAME+".families", families);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span> if (rowPrefixes != null){<a name="line.404"></a>
+<span class="sourceLineNo">405</span> conf.set(NAME+".rowPrefixes", rowPrefixes);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> String peerQuorumAddress;<a name="line.408"></a>
+<span class="sourceLineNo">409</span> Pair<ReplicationPeerConfig, Configuration> peerConfigPair = null;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> if (peerId != null) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> peerConfigPair = getPeerQuorumConfig(conf, peerId);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> ReplicationPeerConfig peerConfig = peerConfigPair.getFirst();<a name="line.412"></a>
+<span class="sourceLineNo">413</span> peerQuorumAddress = peerConfig.getClusterKey();<a name="line.413"></a>
+<span class="sourceLineNo">414</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress + ", Peer Configuration: " +<a name="line.414"></a>
+<span class="sourceLineNo">415</span> peerConfig.getConfiguration());<a name="line.415"></a>
+<span class="sourceLineNo">416</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.416"></a>
+<span class="sourceLineNo">417</span> HBaseConfiguration.setWithPrefix(conf, PEER_CONFIG_PREFIX,<a name="line.417"></a>
+<span class="sourceLineNo">418</span> peerConfig.getConfiguration().entrySet());<a name="line.418"></a>
+<span class="sourceLineNo">419</span> } else {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> assert this.peerQuorumAddress != null;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> peerQuorumAddress = this.peerQuorumAddress;<a name="line.421"></a>
+<span class="sourceLineNo">422</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress);<a name="line.422"></a>
+<span class="sourceLineNo">423</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.423"></a>
+<span class="sourceLineNo">424</span> }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> if (peerTableName != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span> LOG.info("Peer Table Name: " + peerTableName);<a name="line.427"></a>
+<span class="sourceLineNo">428</span> conf.set(NAME + ".peerTableName", peerTableName);<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> conf.setInt(NAME + ".versions", versions);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> LOG.info("Number of version: " + versions);<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> //Set Snapshot specific parameters<a name="line.434"></a>
+<span class="sourceLineNo">435</span> if (peerSnapshotName != null) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span> conf.set(NAME + ".peerSnapshotName", peerSnapshotName);<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span> // This is to create HDFS delegation token for peer cluster in case of secured<a name="line.438"></a>
-<span class="sourceLineNo">439</span> conf.setStrings(MRJobConfig.JOB_NAMENODES, peerFSAddress, conf.get(HConstants.HBASE_DIR));<a name="line.439"></a>
-<span class="sourceLineNo">440</span> }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span> Job job = Job.getInstance(conf, conf.get(JOB_NAME_CONF_KEY, NAME + "_" + tableName));<a name="line.442"></a>
-<span class="sourceLineNo">443</span> job.setJarByClass(VerifyReplication.class);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span> Scan scan = new Scan();<a name="line.445"></a>
-<span class="sourceLineNo">446</span> scan.setTimeRange(startTime, endTime);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> scan.setRaw(includeDeletedCells);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> scan.setCacheBlocks(false);<a name="line.448"></a>
-<span class="sourceLineNo">449</span> if (batch > 0) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> scan.setBatch(batch);<a name="line.450"></a>
-<span class="sourceLineNo">451</span> }<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (versions >= 0) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> scan.setMaxVersions(versions);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.info("Number of versions set to " + versions);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span> if(families != null) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span> String[] fams = families.split(",");<a name="line.457"></a>
-<span class="sourceLineNo">458</span> for(String fam : fams) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (sourceSnapshotName != null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> Path snapshotTempPath = new Path(sourceSnapshotTmpDir);<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.info(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> "Using source snapshot-" + sourceSnapshotName + " with temp dir:" + sourceSnapshotTmpDir);<a name="line.468"></a>
-<span class="sourceLineNo">469</span> TableMapReduceUtil.initTableSnapshotMapperJob(sourceSnapshotName, scan, Verifier.class, null,<a name="line.469"></a>
-<span class="sourceLineNo">470</span> null, job, true, snapshotTempPath);<a name="line.470"></a>
-<span class="sourceLineNo">471</span> restoreSnapshotForPeerCluster(conf, peerQuorumAddress);<a name="line.471"></a>
-<span class="sourceLineNo">472</span> } else {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> TableMapReduceUtil.initTableMapperJob(tableName, scan, Verifier.class, null, null, job);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span> if (peerId != null) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span> assert peerConfigPair != null;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> Configuration peerClusterConf = peerConfigPair.getSecond();<a name="line.478"></a>
-<span class="sourceLineNo">479</span> // Obtain the auth token from peer cluster<a name="line.479"></a>
-<span class="sourceLineNo">480</span> TableMapReduceUtil.initCredentialsForCluster(job, peerClusterConf);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span> job.setOutputFormatClass(NullOutputFormat.class);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> job.setNumReduceTasks(0);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> return job;<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span> private static void setRowPrefixFilter(Scan scan, String rowPrefixes) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> if (rowPrefixes != null && !rowPrefixes.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> String[] rowPrefixArray = rowPrefixes.split(",");<a name="line.490"></a>
-<span class="sourceLineNo">491</span> Arrays.sort(rowPrefixArray);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);<a name="line.492"></a>
-<span class="sourceLineNo">493</span> for (String prefix : rowPrefixArray) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span> Filter filter = new PrefixFilter(Bytes.toBytes(prefix));<a name="line.494"></a>
-<span class="sourceLineNo">495</span> filterList.addFilter(filter);<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span> scan.setFilter(filterList);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> byte[] startPrefixRow = Bytes.toBytes(rowPrefixArray[0]);<a name="line.498"></a>
-<span class="sourceLineNo">499</span> byte[] lastPrefixRow = Bytes.toBytes(rowPrefixArray[rowPrefixArray.length -1]);<a name="line.499"></a>
-<span class="sourceLineNo">500</span> setStartAndStopRows(scan, startPrefixRow, lastPrefixRow);<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> private static void setStartAndStopRows(Scan scan, byte[] startPrefixRow, byte[] lastPrefixRow) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span> scan.setStartRow(startPrefixRow);<a name="line.505"></a>
-<span class="sourceLineNo">506</span> byte[] stopRow = Bytes.add(Bytes.head(lastPrefixRow, lastPrefixRow.length - 1),<a name="line.506"></a>
-<span class="sourceLineNo">507</span> new byte[]{(byte) (lastPrefixRow[lastPrefixRow.length - 1] + 1)});<a name="line.507"></a>
-<span class="sourceLineNo">508</span> scan.setStopRow(stopRow);<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> @VisibleForTesting<a name="line.511"></a>
-<span class="sourceLineNo">512</span> public boolean doCommandLine(final String[] args) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span> if (args.length < 2) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> printUsage(null);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span> try {<a name="line.517"></a>
-<span class="sourceLineNo">518</span> for (int i = 0; i < args.length; i++) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span> String cmd = args[i];<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> printUsage(null);<a name="line.521"></a>
-<span class="sourceLineNo">522</span> return false;<a name="line.522"></a>
-<span class="sourceLineNo">523</span> }<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span> final String startTimeArgKey = "--starttime=";<a name="line.525"></a>
-<span class="sourceLineNo">526</span> if (cmd.startsWith(startTimeArgKey)) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> startTime = Long.parseLong(cmd.substring(startTimeArgKey.length()));<a name="line.527"></a>
-<span class="sourceLineNo">528</span> continue;<a name="line.528"></a>
-<span class="sourceLineNo">529</span> }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span> final String endTimeArgKey = "--endtime=";<a name="line.531"></a>
-<span class="sourceLineNo">532</span> if (cmd.startsWith(endTimeArgKey)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span> endTime = Long.parseLong(cmd.substring(endTimeArgKey.length()));<a name="line.533"></a>
-<span class="sourceLineNo">534</span> continue;<a name="line.534"></a>
-<span class="sourceLineNo">535</span> }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> final String includeDeletedCellsArgKey = "--raw";<a name="line.537"></a>
-<span class="sourceLineNo">538</span> if (cmd.equals(includeDeletedCellsArgKey)) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span> includeDeletedCells = true;<a name="line.539"></a>
-<span class="sourceLineNo">540</span> continue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span> }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span> final String versionsArgKey = "--versions=";<a name="line.543"></a>
-<span class="sourceLineNo">544</span> if (cmd.startsWith(versionsArgKey)) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> versions = Integer.parseInt(cmd.substring(versionsArgKey.length()));<a name="line.545"></a>
-<span class="sourceLineNo">546</span> continue;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span> final String batchArgKey = "--batch=";<a name="line.549"></a>
-<span class="sourceLineNo">550</span> if (cmd.startsWith(batchArgKey)) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> batch = Integer.parseInt(cmd.substring(batchArgKey.length()));<a name="line.551"></a>
-<span class="sourceLineNo">552</span> continue;<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> final String familiesArgKey = "--families=";<a name="line.555"></a>
-<span class="sourceLineNo">556</span> if (cmd.startsWith(familiesArgKey)) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> families = cmd.substring(familiesArgKey.length());<a name="line.557"></a>
-<span class="sourceLineNo">558</span> continue;<a name="line.558"></a>
-<span class="sourceLineNo">559</span> }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span> final String rowPrefixesKey = "--row-prefixes=";<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (cmd.startsWith(rowPrefixesKey)){<a name="line.562"></a>
-<span class="sourceLineNo">563</span> rowPrefixes = cmd.substring(rowPrefixesKey.length());<a name="line.563"></a>
-<span class="sourceLineNo">564</span> continue;<a name="line.564"></a>
-<span class="sourceLineNo">565</span> }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span> final String delimiterArgKey = "--delimiter=";<a name="line.567"></a>
-<span class="sourceLineNo">568</span> if (cmd.startsWith(delimiterArgKey)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> delimiter = cmd.substring(delimiterArgKey.length());<a name="line.569"></a>
-<span class="sourceLineNo">570</span> continue;<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> final String sleepToReCompareKey = "--recomparesleep=";<a name="line.573"></a>
-<span class="sourceLineNo">574</span> if (cmd.startsWith(sleepToReCompareKey)) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> sleepMsBeforeReCompare = Integer.parseInt(cmd.substring(sleepToReCompareKey.length()));<a name="line.575"></a>
-<span class="sourceLineNo">576</span> continue;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final String verboseKey = "--verbose";<a name="line.578"></a>
-<span class="sourceLineNo">579</span> if (cmd.startsWith(verboseKey)) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> verbose = true;<a name="line.580"></a>
-<span class="sourceLineNo">581</span> continue;<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> final String sourceSnapshotNameArgKey = "--sourceSnapshotName=";<a name="line.584"></a>
-<span class="sourceLineNo">585</span> if (cmd.startsWith(sourceSnapshotNameArgKey)) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span> sourceSnapshotName = cmd.substring(sourceSnapshotNameArgKey.length());<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> final String sourceSnapshotTmpDirArgKey = "--sourceSnapshotTmpDir=";<a name="line.590"></a>
-<span class="sourceLineNo">591</span> if (cmd.startsWith(sourceSnapshotTmpDirArgKey)) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> sourceSnapshotTmpDir = cmd.substring(sourceSnapshotTmpDirArgKey.length());<a name="line.592"></a>
-<span class="sourceLineNo">593</span> continue;<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> final String peerSnapshotNameArgKey = "--peerSnapshotName=";<a name="line.596"></a>
-<span class="sourceLineNo">597</span> if (cmd.startsWith(peerSnapshotNameArgKey)) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span> peerSnapshotName = cmd.substring(peerSnapshotNameArgKey.length());<a name="line.598"></a>
-<span class="sourceLineNo">599</span> continue;<a name="line.599"></a>
-<span class="sourceLineNo">600</span> }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span> final String peerSnapshotTmpDirArgKey = "--peerSnapshotTmpDir=";<a name="line.602"></a>
-<span class="sourceLineNo">603</span> if (cmd.startsWith(peerSnapshotTmpDirArgKey)) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> peerSnapshotTmpDir = cmd.substring(peerSnapshotTmpDirArgKey.length());<a name="line.604"></a>
-<span class="sourceLineNo">605</span> continue;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span> final String peerFSAddressArgKey = "--peerFSAddress=";<a name="line.608"></a>
-<span class="sourceLineNo">609</span> if (cmd.startsWith(peerFSAddressArgKey)) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span> peerFSAddress = cmd.substring(peerFSAddressArgKey.length());<a name="line.610"></a>
-<span class="sourceLineNo">611</span> continue;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> final String peerHBaseRootAddressArgKey = "--peerHBaseRootAddress=";<a name="line.614"></a>
-<span class="sourceLineNo">615</span> if (cmd.startsWith(peerHBaseRootAddressArgKey)) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span> peerHBaseRootAddress = cmd.substring(peerHBaseRootAddressArgKey.length());<a name="line.616"></a>
-<span class="sourceLineNo">617</span> continue;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span> if (cmd.startsWith("--")) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> printUsage("Invalid argument '" + cmd + "'");<a name="line.621"></a>
-<span class="sourceLineNo">622</span> return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> if (i == args.length-2) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span> if (isPeerQuorumAddress(cmd)) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> peerQuorumAddress = cmd;<a name="line.627"></a>
-<span class="sourceLineNo">628</span> } else {<a name="line.628"></a>
-<span class="sourceLineNo">629</span> peerId = cmd;<a name="line.629"></a>
-<span class="sourceLineNo">630</span> }<a name="line.630"></a>
-<span class="sourceLineNo">631</span> }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> if (i == args.length-1) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span> tableName = cmd;<a name="line.634"></a>
-<span class="sourceLineNo">635</span> }<a name="line.635"></a>
-<span class="sourceLineNo">636</span> }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span> if ((sourceSnapshotName != null && sourceSnapshotTmpDir == null)<a name="line.638"></a>
-<span class="sourceLineNo">639</span> || (sourceSnapshotName == null && sourceSnapshotTmpDir != null)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span> printUsage("Source snapshot name and snapshot temp location should be provided"<a name="line.640"></a>
-<span class="sourceLineNo">641</span> + " to use snapshots in source cluster");<a name="line.641"></a>
-<span class="sourceLineNo">642</span> return false;<a name="line.642"></a>
-<span class="sourceLineNo">643</span> }<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span> if (peerSnapshotName != null || peerSnapshotTmpDir != null || peerFSAddress != null<a name="line.645"></a>
-<span class="sourceLineNo">646</span> || peerHBaseRootAddress != null) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span> if (peerSnapshotName == null || peerSnapshotTmpDir == null || peerFSAddress == null<a name="line.647"></a>
-<span class="sourceLineNo">648</span> || peerHBaseRootAddress == null) {<a name="line.648"></a>
-<span class="sourceLineNo">649</span> printUsage(<a name="line.649"></a>
-<span class="sourceLineNo">650</span> "Peer snapshot name, peer snapshot temp location, Peer HBase root address and "<a name="line.650"></a>
-<span class="sourceLineNo">651</span> + "peer FSAddress should be provided to use snapshots in peer cluster");<a name="line.651"></a>
-<span class="sourceLineNo">652</span> return false;<a name="line.652"></a>
-<span class="sourceLineNo">653</span> }<a name="line.653"></a>
-<span class="sourceLineNo">654</span> }<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> // This is to avoid making recompare calls to source/peer tables when snapshots are used<a name="line.656"></a>
-<span class="sourceLineNo">657</span> if ((sourceSnapshotName != null || peerSnapshotName != null) && sleepMsBeforeReCompare > 0) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> printUsage(<a name="line.658"></a>
-<span class="sourceLineNo">659</span> "Using sleepMsBeforeReCompare along with snapshots is not allowed as snapshots are immutable");<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return false;<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> } catch (Exception e) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span> LOG.error("Failed to parse commandLine arguments", e);<a name="line.664"></a>
-<span class="sourceLineNo">665</span> printUsage("Can't start because " + e.getMessage());<a name="line.665"></a>
-<span class="sourceLineNo">666</span> return false;<a name="line.666"></a>
-<span class="sourceLineNo">667</span> }<a name="line.667"></a>
-<span class="sourceLineNo">668</span> return true;<a name="line.668"></a>
-<span class="sourceLineNo">669</span> }<a name="line.669"></a>
+<span class="sourceLineNo">438</span> // for verifyRep by snapshot, choose a unique sub-directory under peerSnapshotTmpDir to<a name="line.438"></a>
+<span class="sourceLineNo">439</span> // restore snapshot.<a name="line.439"></a>
+<span class="sourceLineNo">440</span> Path restoreDir = new Path(peerSnapshotTmpDir, UUID.randomUUID().toString());<a name="line.440"></a>
+<span class="sourceLineNo">441</span> peerSnapshotTmpDir = restoreDir.toString();<a name="line.441"></a>
+<span class="sourceLineNo">442</span> conf.set(NAME + ".peerSnapshotTmpDir", peerSnapshotTmpDir);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> conf.set(NAME + ".peerFSAddress", peerFSAddress);<a name="line.444"></a>
+<span class="sourceLineNo">445</span> conf.set(NAME + ".peerHBaseRootAddress", peerHBaseRootAddress);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> // This is to create HDFS delegation token for peer cluster in case of secured<a name="line.447"></a>
+<span class="sourceLineNo">448</span> conf.setStrings(MRJobConfig.JOB_NAMENODES, peerFSAddress, conf.get(HConstants.HBASE_DIR));<a name="line.448"></a>
+<span class="sourceLineNo">449</span> }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> Job job = Job.getInstance(conf, conf.get(JOB_NAME_CONF_KEY, NAME + "_" + tableName));<a name="line.451"></a>
+<span class="sourceLineNo">452</span> job.setJarByClass(VerifyReplication.class);<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> Scan scan = new Scan();<a name="line.454"></a>
+<span class="sourceLineNo">455</span> scan.setTimeRange(startTime, endTime);<a name="line.455"></a>
+<span class="sourceLineNo">456</span> scan.setRaw(includeDeletedCells);<a name="line.456"></a>
+<span class="sourceLineNo">457</span> scan.setCacheBlocks(false);<a name="line.457"></a>
+<span class="sourceLineNo">458</span> if (batch > 0) {<a name="line.458"></a>
+<span class="sourceLineNo">459</span> scan.setBatch(batch);<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> if (versions >= 0) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span> scan.setMaxVersions(versions);<a name="line.462"></a>
+<span class="sourceLineNo">463</span> LOG.info("Number of versions set to " + versions);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> }<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if(families != null) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span> String[] fams = families.split(",");<a name="line.466"></a>
+<span class="sourceLineNo">467</span> for(String fam : fams) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span> scan.addFamily(Bytes.toBytes(fam));<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> setRowPrefixFilter(scan, rowPrefixes);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span> if (sourceSnapshotName != null) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span> Path snapshotTempPath = new Path(sourceSnapshotTmpDir);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> LOG.info(<a name="line.476"></a>
+<span class="sourceLineNo">477</span> "Using source snapshot-" + sourceSnapshotName + " with temp dir:" + sourceSnapshotTmpDir);<a name="line.477"></a>
+<span class="sourceLineNo">478</span> TableMapReduceUtil.initTableSnapshotMapperJob(sourceSnapshotName, scan, Verifier.class, null,<a name="line.478"></a>
+<span class="sourceLineNo">479</span> null, job, true, snapshotTempPath);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> restoreSnapshotForPeerCluster(conf, peerQuorumAddress);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span> TableMapReduceUtil.initTableMapperJob(tableName, scan, Verifier.class, null, null, job);<a name="line.482"></a>
+<span class="sourceLineNo">483</span> }<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span> if (peerId != null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span> assert peerConfigPair != null;<a name="line.486"></a>
+<span class="sourceLineNo">487</span> Configuration peerClusterConf = peerConfigPair.getSecond();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> // Obtain the auth token from peer cluster<a name="line.488"></a>
+<span class="sourceLineNo">489</span> TableMapReduceUtil.initCredentialsForCluster(job, peerClusterConf);<a name="line.489"></a>
+<span class="sourceLineNo">490</span> }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span> job.setOutputFormatClass(NullOutputFormat.class);<a name="line.492"></a>
+<span class="sourceLineNo">493</span> job.setNumReduceTasks(0);<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return job;<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> private static void setRowPrefixFilter(Scan scan, String rowPrefixes) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> if (rowPrefixes != null && !rowPrefixes.isEmpty()) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span> String[] rowPrefixArray = rowPrefixes.split(",");<a name="line.499"></a>
+<span class="sourceLineNo">500</span> Arrays.sort(rowPrefixArray);<a name="line.500"></a>
+<span class="sourceLineNo">501</span> FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> for (String prefix : rowPrefixArray) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span> Filter filter = new PrefixFilter(Bytes.toBytes(prefix));<a name="line.503"></a>
+<span class="sourceLineNo">504</span> filterList.addFilter(filter);<a name="line.504"></a>
+<span class="sourceLineNo">505</span> }<a name="line.505"></a>
+<span class="sourceLineNo">506</span> scan.setFilter(filterList);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> byte[] startPrefixRow = Bytes.toBytes(rowPrefixArray[0]);<a name="line.507"></a>
+<span class="sourceLineNo">508</span> byte[] lastPrefixRow = Bytes.toBytes(rowPrefixArray[rowPrefixArray.length -1]);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> setStartAndStopRows(scan, startPrefixRow, lastPrefixRow);<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span> private static void setStartAndStopRows(Scan scan, byte[] startPrefixRow, byte[] lastPrefixRow) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span> scan.setStartRow(startPrefixRow);<a name="line.514"></a>
+<span class="sourceLineNo">515</span> byte[] stopRow = Bytes.add(Bytes.head(lastPrefixRow, lastPrefixRow.length - 1),<a name="line.515"></a>
+<span class="sourceLineNo">516</span> new byte[]{(byte) (lastPrefixRow[lastPrefixRow.length - 1] + 1)});<a name="line.516"></a>
+<span class="sourceLineNo">517</span> scan.setStopRow(stopRow);<a name="line.517"></a>
+<span class="sourceLineNo">518</span> }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span> @VisibleForTesting<a name="line.520"></a>
+<span class="sourceLineNo">521</span> public boolean doCommandLine(final String[] args) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> if (args.length < 2) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span> printUsage(null);<a name="line.523"></a>
+<span class="sourceLineNo">524</span> return false;<a name="line.524"></a>
+<span class="sourceLineNo">525</span> }<a name="line.525"></a>
+<span class="sourceLineNo">526</span> try {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> for (int i = 0; i < args.length; i++) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span> String cmd = args[i];<a name="line.528"></a>
+<span class="sourceLineNo">529</span> if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.529"></a>
+<span class="sourceLineNo">530</span> printUsage(null);<a name="line.530"></a>
+<span class="sourceLineNo">531</span> return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span> }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span> final String startTimeArgKey = "--starttime=";<a name="line.534"></a>
+<span class="sourceLineNo">535</span> if (cmd.startsWith(startTimeArgKey)) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span> startTime = Long.parseLong(cmd.substring(startTimeArgKey.length()));<a name="line.536"></a>
+<span class="sourceLineNo">537</span> continue;<a name="line.537"></a>
+<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span> final String endTimeArgKey = "--endtime=";<a name="line.540"></a>
+<span class="sourceLineNo">541</span> if (cmd.startsWith(endTimeArgKey)) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span> endTime = Long.parseLong(cmd.substring(endTimeArgKey.length()));<a name="line.542"></a>
+<span class="sourceLineNo">543</span> continue;<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> final String includeDeletedCellsArgKey = "--raw";<a name="line.546"></a>
+<span class="sourceLineNo">547</span> if (cmd.equals(includeDeletedCellsArgKey)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> includeDeletedCells = true;<a name="line.548"></a>
+<span class="sourceLineNo">549</span> continue;<a name="line.549"></a>
+<span class="sourceLineNo">550</span> }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span> final String versionsArgKey = "--versions=";<a name="line.552"></a>
+<span class="sourceLineNo">553</span> if (cmd.startsWith(versionsArgKey)) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> versions = Integer.parseInt(cmd.substring(versionsArgKey.length()));<a name="line.554"></a>
+<span class="sourceLineNo">555</span> continue;<a name="line.555"></a>
+<span class="sourceLineNo">556</span> }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span> final String batchArgKey = "--batch=";<a name="line.558"></a>
+<span class="sourceLineNo">559</span> if (cmd.startsWith(batchArgKey)) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span> batch = Integer.parseInt(cmd.substring(batchArgKey.length()));<a name="line.560"></a>
+<span class="sourceLineNo">561</span> continue;<a name="line.561"></a>
+<span class="sourceLineNo">562</span> }<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">564</span> final String familiesArgKey = "--families=";<a name="line.564"></a>
+<span class="sourceLineNo">565</span> if (cmd.startsWith(familiesArgKey)) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span> families = cmd.substring(familiesArgKey.length());<a name="line.566"></a>
+<span class="sourceLineNo">567</span> continue;<a name="line.567"></a>
+<span class="sourceLineNo">568</span> }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span> final String rowPrefixesKey = "--row-prefixes=";<a name="line.570"></a>
+<span class="sourceLineNo">571</span> if (cmd.startsWith(rowPrefixesKey)){<a name="line.571"></a>
+<span class="sourceLineNo">572</span> rowPrefixes = cmd.substring(rowPrefixesKey.length());<a name="line.572"></a>
+<span class="sourceLineNo">573</span> continue;<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> final String delimiterArgKey = "--delimiter=";<a name="line.576"></a>
+<span class="sourceLineNo">577</span> if (cmd.startsWith(delimiterArgKey)) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span> delimiter = cmd.substring(delimiterArgKey.length());<a name="line.578"></a>
+<span class="sourceLineNo">579</span> continue;<a name="line.579"></a>
+<span class="sourceLineNo">580</span> }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span> final String sleepToReCompareKey = "--recomparesleep=";<a name="line.582"></a>
+<span class="sourceLineNo">583</span> if (cmd.startsWith(sleepToReCompareKey)) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> sleepMsBeforeReCompare = Integer.parseInt(cmd.substring(sleepToReCompareKey.length()));<a name="line.584"></a>
+<span class="sourceLineNo">585</span> continue;<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<a name="line.586"></a>
+<span class="sourceLineNo">587</span> final String verboseKey = "--verbose";<a name="line.587"></a>
+<span class="sourceLineNo">588</span> if (cmd.startsWith(verboseKey)) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span> verbose = true;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> continue;<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span> final String sourceSnapshotNameArgKey = "--sourceSnapshotName=";<a name="line.593"></a>
+<span class="sourceLineNo">594</span> if (cmd.startsWith(sourceSnapshotNameArgKey)) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span> sourceSnapshotName = cmd.substring(sourceSnapshotNameArgKey.length());<a name="line.595"></a>
+<span class="sourceLineNo">596</span> continue;<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> final String sourceSnapshotTmpDirArgKey = "--sourceSnapshotTmpDir=";<a name="line.599"></a>
+<span class="sourceLineNo">600</span> if (cmd.startsWith(sourceSnapshotTmpDirArgKey)) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span> sourceSnapshotTmpDir = cmd.substring(sourceSnapshotTmpDirArgKey.length());<a name="line.601"></a>
+<span class="sourceLineNo">602</span> continue;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span> final String peerSnapshotNameArgKey = "--peerSnapshotName=";<a name="line.605"></a>
+<span class="sourceLineNo">606</span> if (cmd.startsWith(peerSnapshotNameArgKey)) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span> peerSnapshotName = cmd.substring(peerSnapshotNameArgKey.length());<a name="line.607"></a>
+<span class="sourceLineNo">608</span> continue;<a name="line.608"></a>
+<span class="sourceLineNo">609</span> }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span> final String peerSnapshotTmpDirArgKey = "--peerSnapshotTmpDir=";<a name="line.611"></a>
+<span class="sourceLineNo">612</span> if (cmd.startsWith(peerSnapshotTmpDirArgKey)) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span> peerSnapshotTmpDir = cmd.substring(peerSnapshotTmpDirArgKey.length());<a name="line.613"></a>
+<span class="sourceLineNo">614</span> continue;<a name="line.614"></a>
+<span class="sourceLineNo">615</span> }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span> final String peerFSAddressArgKey = "--peerFSAddress=";<a name="line.617"></a>
+<span class="sourceLineNo">618</span> if (cmd.startsWith(peerFSAddressArgKey)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> peerFSAddress = cmd.substring(peerFSAddressArgKey.length());<a name="line.619"></a>
+<span class="sourceLineNo">620</span> continue;<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> final String peerHBaseRootAddressArgKey = "--peerHBaseRootAddress=";<a name="line.623"></a>
+<span class="sourceLineNo">624</span> if (cmd.startsWith(peerHBaseRootAddressArgKey)) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span> peerHBaseRootAddress = cmd.substring(peerHBaseRootAddressArgKey.length());<a name="line.625"></a>
+<span class="sourceLineNo">626</span> continue;<a name="line.626"></a>
+<span class="sourceLineNo">627</span> }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span> final String peerTableNameArgKey = "--peerTableName=";<a name="line.629"></a>
+<span class="sourceLineNo">630</span> if (cmd.startsWith(peerTableNameArgKey)) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span> peerTableName = cmd.substring(peerTableNameArgKey.length());<a name="line.631"></a>
+<span class="sourceLineNo">632</span> continue;<a name="line.632"></a>
+<span class="sourceLineNo">633</span> }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span> if (cmd.startsWith("--")) {<a name="line.635"></a>
+<span class="sourceLineNo">636</span> printUsage("Invalid argument '" + cmd + "'");<a name="line.636"></a>
+<span class="sourceLineNo">637</span> return false;<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span> if (i == args.length-2) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span> if (isPeerQuorumAddress(cmd)) {<a name="line.641"></a>
+<span class="sourceLineNo">642</span> peerQuorumAddress = cmd;<a name="line.642"></a>
+<span class="sourceLineNo">643</span> } else {<a name="line.643"></a>
+<span class="sourceLineNo">644</span> peerId = cmd;<a name="line.644"></a>
+<span class="sourceLineNo">645</span> }<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span> if (i == args.length-1) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span> tableName = cmd;<a name="line.649"></a>
+<span class="sourceLineNo">650</span> }<a name="line.650"></a>
+<span class="sourceLineNo">651</span> }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span> if ((sourceSnapshotName != null && sourceSnapshotTmpDir == null)<a name="line.653"></a>
+<span class="sourceLineNo">654</span> || (sourceSnapshotName == null && sourceSnapshotTmpDir != null)) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> printUsage("Source snapshot name and snapshot temp location should be provided"<a name="line.655"></a>
+<span class="sourceLineNo">656</span> + " to use snapshots in source cluster");<a name="line.656"></a>
+<span class="sourceLineNo">657</span> return false;<a name="line.657"></a>
+<span class="sourceLineNo">658</span> }<a name="line.658"></a>
+<span class="sourceLineNo">659</span><a name="line.659"></a>
+<span class="sourceLineNo">660</span> if (peerSnapshotName != null || peerSnapshotTmpDir != null || peerFSAddress != null<a name="line.660"></a>
+<span class="sourceLineNo">661</span> || peerHBaseRootAddress != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span> if (peerSnapshotName == null || peerSnapshotTmpDir == null || peerFSAddress == null<a name="line.662"></a>
+<span class="sourceLineNo">663</span> || peerHBaseRootAddress == null) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span> printUsage(<a name="line.664"></a>
+<span class="sourceLineNo">665</span> "Peer snapshot name, peer snapshot temp location, Peer HBase root address and "<a name="line.665"></a>
+<span class="sourceLineNo">666</span> + "peer FSAddress should be provided to use snapshots in peer cluster");<a name="line.666"></a>
+<span class="sourceLineNo">667</span> return false;<a name="line.667"></a>
+<span class="sourceLineNo">668</span> }<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> private boolean isPeerQuorumAddress(String cmd) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span> ZKConfig.validateClusterKey(cmd);<a name="line.673"></a>
-<span class="sourceLineNo">674</span> } catch (IOException e) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> // not a quorum address<a name="line.675"></a>
-<span class="sourceLineNo">676</span> return false;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> }<a name="line.677"></a>
-<span class="sourceLineNo">678</span> return true;<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>
-<span class="sourceLineNo">682</span> * @param errorMsg Error message. Can be null.<a name="line.682"></a>
-<span class="sourceLineNo">683</span> */<a name="line.683"></a>
-<span class="sourceLineNo">684</span> private static void printUsage(final String errorMsg) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> if (errorMsg != null && errorMsg.length() > 0) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> System.err.println("ERROR: " + errorMsg);<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
-<span class="sourceLineNo">688</span> System.err.println("Usage: verifyrep [--starttime=X]" +<a name="line.688"></a>
-<span class="sourceLineNo">689</span> " [--endtime=Y] [--families=A] [--row-prefixes=B] [--delimiter=] [--recomparesleep=] " +<a name="line.689"></a>
-<span class="sourceLineNo">690</span> "[--batch=] [--verbose] [--sourceSnapshotName=P] [--sourceSnapshotTmpDir=Q] "<a name="line.690"></a>
-<span class="sourceLineNo">691</span> + "[--peerSnapshotName=R] [--peerSnapshotTmpDir=S] [--peerFSAddress=T] "<a name="line.691"></a>
-<span class="sourceLineNo">692</span> + "[--peerHBaseRootAddress=U] <peerid|peerQuorumAddress> <tablename>");<a name="line.692"></a>
-<span class="sourceLineNo">693</span> System.err.println();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> System.err.println("Options:");<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.err.println(" starttime beginning of the time range");<a name="line.695"></a>
-<span class="sourceLineNo">696</span> System.err.println(" without endtime means from starttime to forever");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> System.err.println(" endtime end of the time range");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> System.err.println(" versions number of cell versions to verify");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> System.err.println(" batch batch count for scan, " +<a name="line.699"></a>
-<span class="sourceLineNo">700</span> "note that result row counts will no longer be actual number of rows when you use this option");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> System.err.println(" raw includes raw scan if given in options");<a name="line.701"></a>
-<span class="sourceLineNo">702</span> System.err.println(" families comma-separated list of families to copy");<a name="line.702"></a>
-<span class="sourceLineNo">703</span> System.err.println(" row-prefixes comma-separated list of row key prefixes to filter on ");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> System.err.println(" delimiter the delimiter used in display around rowkey");<a name="line.704"></a>
-<span class="sourceLineNo">705</span> System.err.println(" recomparesleep milliseconds to sleep before recompare row, " +<a name="line.705"></a>
-<span class="sourceLineNo">706</span> "default value is 0 which disables the recompare.");<a name="line.706"></a>
-<span class="sourceLineNo">707</span> System.err.println(" verbose logs row keys of good rows");<a name="line.707"></a>
-<span class="sourceLineNo">708</span> System.err.println(" sourceSnapshotName Source Snapshot Name");<a name="line.708"></a>
-<span class="sourceLineNo">709</span> System.err.println(" sourceSnapshotTmpDir Tmp location to restore source table snapshot");<a name="line.709"></a>
-<span class="sourceLineNo">710</span> System.err.println(" peerSnapshotName Peer Snapshot Name");<a name="line.710"></a>
-<span class="sourceLineNo">711</span> System.err.println(" peerSnapshotTmpDir Tmp location to restore peer table snapshot");<a name="line.711"></a>
-<span class="sourceLineNo">712</span> System.err.println(" peerFSAddress Peer cluster Hadoop FS address");<a name="line.712"></a>
-<span class="sourceLineNo">713</span> System.err.println(" peerHBaseRootAddress Peer cluster HBase root location");<a name="line.713"></a>
-<span class="sourceLineNo">714</span> System.err.println();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> System.err.println("Args:");<a name="line.715"></a>
-<span class="sourceLineNo">716</span> System.err.println(" peerid Id of the peer used for verification, must match the one given for replication");<a name="line.716"></a>
-<span class="sourceLineNo">717</span> System.err.println(" peerQuorumAddress quorumAdress of the peer used for verification. The "<a name="line.717"></a>
-<span class="sourceLineNo">718</span> + "format is zk_quorum:zk_port:zk_hbase_path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> System.err.println(" tablename Name of the table to verify");<a name="line.719"></a>
-<span class="sourceLineNo">720</span> System.err.println();<a name="line.720"></a>
-<span class="sourceLineNo">721</span> System.err.println("Examples:");<a name="line.721"></a>
-<span class="sourceLineNo">722</span> System.err.println(" To verify the data replicated from TestTable for a 1 hour window with peer #5 ");<a name="line.722"></a>
-<span class="sourceLineNo">723</span> System.err.println(" $ hbase " +<a name="line.723"></a>
-<span class="sourceLineNo">724</span> "org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication" +<a name="line.724"></a>
-<span class="sourceLineNo">725</span> " --starttime=1265875194289 --endtime=1265878794289 5 TestTable ");<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> @Override<a name="line.728"></a>
-<span class="sourceLineNo">729</span> public int run(String[] args) throws Exception {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> Configuration conf = this.getConf();<a name="line.730"></a>
-<span class="sourceLineNo">731</span> Job job = createSubmittableJob(conf, args);<a name="line.731"></a>
-<span class="sourceLineNo">732</span> if (job != null) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span> return job.waitForCompletion(true) ? 0 : 1;<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span> return 1;<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> /**<a name="line.738"></a>
-<span class="sourceLineNo">739</span> * Main entry point.<a name="line.739"></a>
-<span class="sourceLineNo">740</span> *<a name="line.740"></a>
-<span class="sourceLineNo">741</span> * @param args The command line parameters.<a name="line.741"></a>
-<span class="sourceLineNo">742</span> * @throws Exception When running the job fails.<a name="line.742"></a>
-<span class="sourceLineNo">743</span> */<a name="line.743"></a>
-<span class="sourceLineNo">744</span> public static void main(String[] args) throws Exception {<a name="line.744"></a>
-<span class="sourceLineNo">745</span> int res = ToolRunner.run(HBaseConfiguration.create(), new VerifyReplication(), args);<a name="line.745"></a>
-<span class="sourceLineNo">746</span> System.exit(res);<a name="line.746"></a>
-<span class="sourceLineNo">747</span> }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>}<a name="line.748"></a>
+<span class="sourceLineNo">671</span> // This is to avoid making recompare calls to source/peer tables when snapshots are used<a name="line.671"></a>
+<span class="sourceLineNo">672</span> if ((sourceSnapshotName != null || peerSnapshotName != null) && sleepMsBeforeReCompare > 0) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span> printUsage(<a name="line.673"></a>
+<span class="sourceLineNo">674</span> "Using sleepMsBeforeReCompare along with snapshots is not allowed as snapshots are immutable");<a name="line.674"></a>
+<span class="sourceLineNo">675</span> return false;<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span> } catch (Exception e) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span> LOG.error("Failed to parse commandLine arguments", e);<a name="line.679"></a>
+<span class="sourceLineNo">680</span> printUsage("Can't start because " + e.getMessage());<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return false;<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> return true;<a name="line.683"></a>
+<span class="sourceLineNo">684</span> }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span> private boolean isPeerQuorumAddress(String cmd) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span> try {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> ZKConfig.validateClusterKey(cmd);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> } catch (IOException e) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span> // not a quorum address<a name="line.690"></a>
+<span class="sourceLineNo">691</span> return false;<a name="line.691"></a>
+<span class="sourceLineNo">692</span> }<a name="line.692"></a>
+<span class="sourceLineNo">693</span> return true;<a name="line.693"></a>
+<span class="sourceLineNo">694</span> }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> /*<a name="line.696"></a>
+<span class="sourceLineNo">697</span> * @param errorMsg Error message. Can be null.<a name="line.697"></a>
+<span class="sourceLineNo">698</span> */<a name="line.698"></a>
+<span class="sourceLineNo">699</span> private static void printUsage(final String errorMsg) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> if (errorMsg != null && errorMsg.length() > 0) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span> System.err.println("ERROR: " + errorMsg);<a name="line.701"></a>
+<span class="sourceLineNo">702</span> }<a name="line.702"></a>
+<span class="sourceLineNo">703</span> System.err.println("Usage: verifyrep [--starttime=X]"<a name="line.703"></a>
+<span class="sourceLineNo">704</span> + " [--endtime=Y] [--families=A] [--row-prefixes=B] [--delimiter=] [--recomparesleep=] "<a name="line.704"></a>
+<span class="sourceLineNo">705</span> + "[--batch=] [--verbose] [--peerTableName=] [--sourceSnapshotName=P] "<a name="line.705"></a>
+<span class="sourceLineNo">706</span> + "[--sourceSnapshotTmpDir=Q] [--peerSnapshotName=R] [--peerSnapshotTmpDir=S] "<a name="line.706"></a>
+<span class="sourceLineNo">707</span> + "[--peerFSAddress=T] [--peerHBaseRootAddress=U] <peerid|peerQuorumAddress> <tablename>");<a name="line.707"></a>
+<span class="sourceLineNo">708</span> System.err.println();<a name="line.708"></a>
+<span class="sourceLineNo">709</span> System.err.println("Options:");<a name="line.709"></a>
+<span class="sourceLineNo">710</span> System.err.println(" starttime beginning of the time range");<a name="line.710"></a>
+<span class="sourceLineNo">711</span> System.err.println(" without endtime means from starttime to forever");<a name="line.711"></a>
+<span class="sourceLineNo">712</span> System.err.println(" endtime end of the time range");<a name="line.712"></a>
+<span class="sourceLineNo">713</span> System.err.println(" versions number of cell versions to verify");<a name="line.713"></a>
+<span class="sourceLineNo">714</span> System.err.println(" batch batch count for scan, " +<a name="line.714"></a>
+<span class="sourceLineNo">715</span> "note that result row counts will no longer be actual number of rows when you use this option");<a name="line.715"></a>
+<span class="sourceLineNo">716</span> System.err.println(" raw includes raw scan if given in options");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> System.err.println(" families comma-separated list of families to copy");<a name="line.717"></a>
+<span class="sourceLineNo">718</span> System.err.println(" row-prefixes comma-separated list of row key prefixes to filter on ");<a name="line.718"></a>
+<span class="sourceLineNo">719</span> System.err.println(" delimiter the delimiter used in display around rowkey");<a name="line.719"></a>
+<span class="sourceLineNo">720</span> System.err.println(" recomparesleep milliseconds to sleep before recompare row, " +<a name="line.720"></a>
+<span class="sourceLineNo">721</span> "default value is 0 which disables the recompare.");<a name="line.721"></a>
+<span class="sourceLineNo">722</span> System.err.println(" verbose logs row keys of good rows");<a name="line.722"></a>
+<span class="sourceLineNo">723</span> System.err.println(" peerTableName Peer Table Name");<a name="line.723"></a>
+<span class="sourceLineNo">724</span> System.err.println(" sourceSnapshotName Source Snapshot Name");<a name="line.724"></a>
+<span class="sourceLineNo">725</span> System.err.println(" sourceSnapshotTmpDir Tmp location to restore source table snapshot");<a name="line.725"></a>
+<span class="sourceLineNo">726</span> System.err.println(" peerSnapshotName Peer Snapshot Name");<a name="line.726"></a>
+<span class="sourceLineNo">727</span> System.err.println(" peerSnapshotTmpDir Tmp location to restore peer table snapshot");<a name="line.727"></a>
+<span class="sourceLineNo">728</span> System.err.println(" peerFSAddress Peer cluster Hadoop FS address");<a name="line.728"></a>
+<span class="sourceLineNo">729</span> System.err.println(" peerHBaseRootAddress Peer cluster HBase root location");<a name="line.729"></a>
+<span class="sourceLineNo">730</span> System.err.println();<a name="line.730"></a>
+<span class="sourceLineNo">731</span> System.err.println("Args:");<a name="line.731"></a>
+<span class="sourceLineNo">732</span> System.err.println(" peerid Id of the peer used for verification, must match the one given for replication");<a name="line.732"></a>
+<span class="sourceLineNo">733</span> System.err.println(" peerQuorumAddress quorumAdress of the peer used for verification. The "<a name="line.733"></a>
+<span class="sourceLineNo">734</span> + "format is zk_quorum:zk_port:zk_hbase_path");<a name="line.734"></a>
+<span class="sourceLineNo">735</span> System.err.println(" tablename Name of the table to verify");<a name="line.735"></a>
+<span class="sourceLineNo">736</span> System.err.println();<a name="line.736"></a>
+<span class="sourceLineNo">737</span> System.err.println("Examples:");<a name="line.737"></a>
+<span class="sourceLineNo">738</span> System.err.println(" To verify the data replicated from TestTable for a 1 hour window with peer #5 ");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> System.err.println(" $ hbase " +<a name="line.739"></a>
+<span class="sourceLineNo">740</span> "org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication" +<a name="line.740"></a>
+<span class="sourceLineNo">741</span> " --starttime=1265875194289 --endtime=1265878794289 5 TestTable ");<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> @Override<a name="line.744"></a>
+<span class="sourceLineNo">745</span> public int run(String[] args) throws Exception {<a name="line.745"></a>
+<span class="sourceLineNo">746</span> Configuration conf = this.getConf();<a name="line.746"></a>
+<span class="sourceLineNo">747</span> Job job = createSubmittableJob(conf, args);<a name="line.747"></a>
+<span class="sourceLineNo">748</span> if (job != null) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return job.waitForCompletion(true) ? 0 : 1;<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> return 1;<a name="line.751"></a>
+<span class="sourceLineNo">752</span> }<a name="line.752"></a>
+<span class="sourceLineNo">753</span><a name="line.753"></a>
+<span class="sourceLineNo">754</span> /**<a name="line.754"></a>
+<span class="sourceLineNo">755</span> * Main entry point.<a name="line.755"></a>
+<span class="sourceLineNo">756</span> *<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * @param args The command line parameters.<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * @throws Exception When running the job fails.<a name="line.758"></a>
+<span class="sourceLineNo">759</span> */<a name="line.759"></a>
+<span class="sourceLineNo">760</span> public static void main(String[] args) throws Exception {<a name="line.760"></a>
+<span class="sourceLineNo">761</span> int res = ToolRunner.run(HBaseConfiguration.create(), new VerifyReplication(), args);<a name="line.761"></a>
+<span class="sourceLineNo">762</span> System.exit(res);<a name="line.762"></a>
+<span class="sourceLineNo">763</span> }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>}<a name="line.764"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
index 47325cd..b16e963 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.Verifier.html
@@ -122,638 +122,654 @@
<span class="sourceLineNo">114</span> String peerFSAddress = null;<a name="line.114"></a>
<span class="sourceLineNo">115</span> //Peer cluster HBase root dir location<a name="line.115"></a>
<span class="sourceLineNo">116</span> String peerHBaseRootAddress = null;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span> private final static String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.119"></a>
+<span class="sourceLineNo">117</span> //Peer Table Name<a name="line.117"></a>
+<span class="sourceLineNo">118</span> String peerTableName = null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * Map-only comparator for 2 tables<a name="line.122"></a>
-<span class="sourceLineNo">123</span> */<a name="line.123"></a>
-<span class="sourceLineNo">124</span> public static class Verifier<a name="line.124"></a>
-<span class="sourceLineNo">125</span> extends TableMapper<ImmutableBytesWritable, Put> {<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span> public enum Counters {<a name="line.127"></a>
-<span class="sourceLineNo">128</span> GOODROWS, BADROWS, ONLY_IN_SOURCE_TABLE_ROWS, ONLY_IN_PEER_TABLE_ROWS, CONTENT_DIFFERENT_ROWS<a name="line.128"></a>
-<span class="sourceLineNo">129</span> }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span> private Connection sourceConnection;<a name="line.131"></a>
-<span class="sourceLineNo">132</span> private Table sourceTable;<a name="line.132"></a>
-<span class="sourceLineNo">133</span> private Connection replicatedConnection;<a name="line.133"></a>
-<span class="sourceLineNo">134</span> private Table replicatedTable;<a name="line.134"></a>
-<span class="sourceLineNo">135</span> private ResultScanner replicatedScanner;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> private Result currentCompareRowInPeerTable;<a name="line.136"></a>
-<span class="sourceLineNo">137</span> private int sleepMsBeforeReCompare;<a name="line.137"></a>
-<span class="sourceLineNo">138</span> private String delimiter = "";<a name="line.138"></a>
-<span class="sourceLineNo">139</span> private boolean verbose = false;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> private int batch = -1;<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> * Map method that compares every scanned row with the equivalent from<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * a distant cluster.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> * @param row The current table row key.<a name="line.145"></a>
-<span class="sourceLineNo">146</span> * @param value The columns.<a name="line.146"></a>
-<span class="sourceLineNo">147</span> * @param context The current context.<a name="line.147"></a>
-<span class="sourceLineNo">148</span> * @throws IOException When something is broken with the data.<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 map(ImmutableBytesWritable row, final Result value,<a name="line.151"></a>
-<span class="sourceLineNo">152</span> Context context)<a name="line.152"></a>
-<span class="sourceLineNo">153</span> throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> if (replicatedScanner == null) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span> Configuration conf = context.getConfiguration();<a name="line.155"></a>
-<span class="sourceLineNo">156</span> sleepMsBeforeReCompare = conf.getInt(NAME +".sleepMsBeforeReCompare", 0);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> delimiter = conf.get(NAME + ".delimiter", "");<a name="line.157"></a>
-<span class="sourceLineNo">158</span> verbose = conf.getBoolean(NAME +".verbose", false);<a name="line.158"></a>
-<span class="sourceLineNo">159</span> batch = conf.getInt(NAME + ".batch", -1);<a name="line.159"></a>
-<span class="sourceLineNo">160</span> final Scan scan = new Scan();<a name="line.160"></a>
-<span class="sourceLineNo">161</span> if (batch > 0) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> scan.setBatch(batch);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span> scan.setCacheBlocks(false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> scan.setCaching(conf.getInt(TableInputFormat.SCAN_CACHEDROWS, 1));<a name="line.165"></a>
-<span class="sourceLineNo">166</span> long startTime = conf.getLong(NAME + ".startTime", 0);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> long endTime = conf.getLong(NAME + ".endTime", Long.MAX_VALUE);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> String families = conf.get(NAME + ".families", null);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> if(families != null) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> String[] fams = families.split(",");<a name="line.170"></a>
-<span class="sourceLineNo">171</span> for(String fam : fams) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.172"></a>
-<span class="sourceLineNo">173</span> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> boolean includeDeletedCells = conf.getBoolean(NAME + ".includeDeletedCells", false);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> scan.setRaw(includeDeletedCells);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> String rowPrefixes = conf.get(NAME + ".rowPrefixes", null);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> scan.setTimeRange(startTime, endTime);<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int versions = conf.getInt(NAME+".versions", -1);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> LOG.info("Setting number of version inside map as: " + versions);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> if (versions >= 0) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> scan.setMaxVersions(versions);<a name="line.183"></a>
-<span class="sourceLineNo">184</span> }<a name="line.184"></a>
-<span class="sourceLineNo">185</span> TableName tableName = TableName.valueOf(conf.get(NAME + ".tableName"));<a name="line.185"></a>
-<span class="sourceLineNo">186</span> sourceConnection = ConnectionFactory.createConnection(conf);<a name="line.186"></a>
-<span class="sourceLineNo">187</span> sourceTable = sourceConnection.getTable(tableName);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> final InputSplit tableSplit = context.getInputSplit();<a name="line.189"></a>
+<span class="sourceLineNo">121</span> private final static String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span> * Map-only comparator for 2 tables<a name="line.124"></a>
+<span class="sourceLineNo">125</span> */<a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static class Verifier<a name="line.126"></a>
+<span class="sourceLineNo">127</span> extends TableMapper<ImmutableBytesWritable, Put> {<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public enum Counters {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> GOODROWS, BADROWS, ONLY_IN_SOURCE_TABLE_ROWS, ONLY_IN_PEER_TABLE_ROWS, CONTENT_DIFFERENT_ROWS<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> private Connection sourceConnection;<a name="line.133"></a>
+<span class="sourceLineNo">134</span> private Table sourceTable;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> private Connection replicatedConnection;<a name="line.135"></a>
+<span class="sourceLineNo">136</span> private Table replicatedTable;<a name="line.136"></a>
+<span class="sourceLineNo">137</span> private ResultScanner replicatedScanner;<a name="line.137"></a>
+<span class="sourceLineNo">138</span> private Result currentCompareRowInPeerTable;<a name="line.138"></a>
+<span class="sourceLineNo">139</span> private int sleepMsBeforeReCompare;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> private String delimiter = "";<a name="line.140"></a>
+<span class="sourceLineNo">141</span> private boolean verbose = false;<a name="line.141"></a>
+<span class="sourceLineNo">142</span> private int batch = -1;<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span> /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span> * Map method that compares every scanned row with the equivalent from<a name="line.145"></a>
+<span class="sourceLineNo">146</span> * a distant cluster.<a name="line.146"></a>
+<span class="sourceLineNo">147</span> * @param row The current table row key.<a name="line.147"></a>
+<span class="sourceLineNo">148</span> * @param value The columns.<a name="line.148"></a>
+<span class="sourceLineNo">149</span> * @param context The current context.<a name="line.149"></a>
+<span class="sourceLineNo">150</span> * @throws IOException When something is broken with the data.<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 map(ImmutableBytesWritable row, final Result value,<a name="line.153"></a>
+<span class="sourceLineNo">154</span> Context context)<a name="line.154"></a>
+<span class="sourceLineNo">155</span> throws IOException {<a name="line.155"></a>
+<span class="sourceLineNo">156</span> if (replicatedScanner == null) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> Configuration conf = context.getConfiguration();<a name="line.157"></a>
+<span class="sourceLineNo">158</span> sleepMsBeforeReCompare = conf.getInt(NAME +".sleepMsBeforeReCompare", 0);<a name="line.158"></a>
+<span class="sourceLineNo">159</span> delimiter = conf.get(NAME + ".delimiter", "");<a name="line.159"></a>
+<span class="sourceLineNo">160</span> verbose = conf.getBoolean(NAME +".verbose", false);<a name="line.160"></a>
+<span class="sourceLineNo">161</span> batch = conf.getInt(NAME + ".batch", -1);<a name="line.161"></a>
+<span class="sourceLineNo">162</span> final Scan scan = new Scan();<a name="line.162"></a>
+<span class="sourceLineNo">163</span> if (batch > 0) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> scan.setBatch(batch);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> }<a name="line.165"></a>
+<span class="sourceLineNo">166</span> scan.setCacheBlocks(false);<a name="line.166"></a>
+<span class="sourceLineNo">167</span> scan.setCaching(conf.getInt(TableInputFormat.SCAN_CACHEDROWS, 1));<a name="line.167"></a>
+<span class="sourceLineNo">168</span> long startTime = conf.getLong(NAME + ".startTime", 0);<a name="line.168"></a>
+<span class="sourceLineNo">169</span> long endTime = conf.getLong(NAME + ".endTime", Long.MAX_VALUE);<a name="line.169"></a>
+<span class="sourceLineNo">170</span> String families = conf.get(NAME + ".families", null);<a name="line.170"></a>
+<span class="sourceLineNo">171</span> if(families != null) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span> String[] fams = families.split(",");<a name="line.172"></a>
+<span class="sourceLineNo">173</span> for(String fam : fams) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.174"></a>
+<span class="sourceLineNo">175</span> }<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span> boolean includeDeletedCells = conf.getBoolean(NAME + ".includeDeletedCells", false);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> scan.setRaw(includeDeletedCells);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> String rowPrefixes = conf.get(NAME + ".rowPrefixes", null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> scan.setTimeRange(startTime, endTime);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> int versions = conf.getInt(NAME+".versions", -1);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> LOG.info("Setting number of version inside map as: " + versions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span> if (versions >= 0) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span> scan.setMaxVersions(versions);<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span> TableName tableName = TableName.valueOf(conf.get(NAME + ".tableName"));<a name="line.187"></a>
+<span class="sourceLineNo">188</span> sourceConnection = ConnectionFactory.createConnection(conf);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> sourceTable = sourceConnection.getTable(tableName);<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span> String zkClusterKey = conf.get(NAME + ".peerQuorumAddress");<a name="line.191"></a>
-<span class="sourceLineNo">192</span> Configuration peerConf = HBaseConfiguration.createClusterConf(conf,<a name="line.192"></a>
-<span class="sourceLineNo">193</span> zkClusterKey, PEER_CONFIG_PREFIX);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> replicatedConnection = ConnectionFactory.createConnection(peerConf);<a name="line.195"></a>
-<span class="sourceLineNo">196</span> replicatedTable = replicatedConnection.getTable(tableName);<a name="line.196"></a>
-<span class="sourceLineNo">197</span> scan.setStartRow(value.getRow());<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span> byte[] endRow = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span> if (tableSplit instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> endRow = ((TableSnapshotInputFormat.TableSnapshotRegionSplit) tableSplit).getRegionInfo()<a name="line.201"></a>
-<span class="sourceLineNo">202</span> .getEndKey();<a name="line.202"></a>
-<span class="sourceLineNo">203</span> } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> endRow = ((TableSplit) tableSplit).getEndRow();<a name="line.204"></a>
-<span class="sourceLineNo">205</span> }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> scan.setStopRow(endRow);<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> String peerSnapshotName = conf.get(NAME + ".peerSnapshotName", null);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> if (peerSnapshotName != null) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> String peerSnapshotTmpDir = conf.get(NAME + ".peerSnapshotTmpDir", null);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> String peerFSAddress = conf.get(NAME + ".peerFSAddress", null);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> String peerHBaseRootAddress = conf.get(NAME + ".peerHBaseRootAddress", null);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> FSUtils.setRootDir(peerConf, new Path(peerHBaseRootAddress));<a name="line.215"></a>
-<span class="sourceLineNo">216</span> LOG.info("Using peer snapshot:" + peerSnapshotName + " with temp dir:"<a name="line.216"></a>
-<span class="sourceLineNo">217</span> + peerSnapshotTmpDir + " peer root uri:" + FSUtils.getRootDir(peerConf)<a name="line.217"></a>
-<span class="sourceLineNo">218</span> + " peerFSAddress:" + peerFSAddress);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span> replicatedScanner = new TableSnapshotScanner(peerConf, FSUtils.getRootDir(peerConf),<a name="line.220"></a>
-<span class="sourceLineNo">221</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName, scan, true);<a name="line.221"></a>
-<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> replicatedScanner = replicatedTable.getScanner(scan);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.225"></a>
-<span class="sourceLineNo">226</span> }<a name="line.226"></a>
-<span class="sourceLineNo">227</span> while (true) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> if (currentCompareRowInPeerTable == null) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span> // reach the region end of peer table, row only in source table<a name="line.229"></a>
-<span class="sourceLineNo">230</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.230"></a>
-<span class="sourceLineNo">231</span> break;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> }<a name="line.232"></a>
-<span class="sourceLineNo">233</span> int rowCmpRet = Bytes.compareTo(value.getRow(), currentCompareRowInPeerTable.getRow());<a name="line.233"></a>
-<span class="sourceLineNo">234</span> if (rowCmpRet == 0) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> // rowkey is same, need to compare the content of the row<a name="line.235"></a>
-<span class="sourceLineNo">236</span> try {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> Result.compareResults(value, currentCompareRowInPeerTable);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> if (verbose) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span> LOG.info("Good row key: " + delimiter<a name="line.240"></a>
-<span class="sourceLineNo">241</span> + Bytes.toStringBinary(value.getRow()) + delimiter);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> } catch (Exception e) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> logFailRowAndIncreaseCounter(context, Counters.CONTENT_DIFFERENT_ROWS, value);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.246"></a>
-<span class="sourceLineNo">247</span> break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else if (rowCmpRet < 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> // row only exists in source table<a name="line.249"></a>
-<span class="sourceLineNo">250</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.250"></a>
+<span class="sourceLineNo">191</span> final InputSplit tableSplit = context.getInputSplit();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span> String zkClusterKey = conf.get(NAME + ".peerQuorumAddress");<a name="line.193"></a>
+<span class="sourceLineNo">194</span> Configuration peerConf = HBaseConfiguration.createClusterConf(conf,<a name="line.194"></a>
+<span class="sourceLineNo">195</span> zkClusterKey, PEER_CONFIG_PREFIX);<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> String peerName = peerConf.get(NAME + ".peerTableName", tableName.getNameAsString());<a name="line.197"></a>
+<span class="sourceLineNo">198</span> TableName peerTableName = TableName.valueOf(peerName);<a name="line.198"></a>
+<span class="sourceLineNo">199</span> replicatedConnection = ConnectionFactory.createConnection(peerConf);<a name="line.199"></a>
+<span class="sourceLineNo">200</span> replicatedTable = replicatedConnection.getTable(peerTableName);<a name="line.200"></a>
+<span class="sourceLineNo">201</span> scan.setStartRow(value.getRow());<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span> byte[] endRow = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span> if (tableSplit instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> endRow = ((TableSnapshotInputFormat.TableSnapshotRegionSplit) tableSplit).getRegionInfo()<a name="line.205"></a>
+<span class="sourceLineNo">206</span> .getEndKey();<a name="line.206"></a>
+<span class="sourceLineNo">207</span> } else {<a name="line.207"></a>
+<span class="sourceLineNo">208</span> endRow = ((TableSplit) tableSplit).getEndRow();<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> scan.setStopRow(endRow);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> String peerSnapshotName = conf.get(NAME + ".peerSnapshotName", null);<a name="line.213"></a>
+<span class="sourceLineNo">214</span> if (peerSnapshotName != null) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> String peerSnapshotTmpDir = conf.get(NAME + ".peerSnapshotTmpDir", null);<a name="line.215"></a>
+<span class="sourceLineNo">216</span> String peerFSAddress = conf.get(NAME + ".peerFSAddress", null);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> String peerHBaseRootAddress = conf.get(NAME + ".peerHBaseRootAddress", null);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> FSUtils.setRootDir(peerConf, new Path(peerHBaseRootAddress));<a name="line.219"></a>
+<span class="sourceLineNo">220</span> LOG.info("Using peer snapshot:" + peerSnapshotName + " with temp dir:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span> + peerSnapshotTmpDir + " peer root uri:" + FSUtils.getRootDir(peerConf)<a name="line.221"></a>
+<span class="sourceLineNo">222</span> + " peerFSAddress:" + peerFSAddress);<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> replicatedScanner = new TableSnapshotScanner(peerConf, FSUtils.getRootDir(peerConf),<a name="line.224"></a>
+<span class="sourceLineNo">225</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName, scan, true);<a name="line.225"></a>
+<span class="sourceLineNo">226</span> } else {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> replicatedScanner = replicatedTable.getScanner(scan);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">229</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.229"></a>
+<span class="sourceLineNo">230</span> }<a name="line.230"></a>
+<span class="sourceLineNo">231</span> while (true) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> if (currentCompareRowInPeerTable == null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // reach the region end of peer table, row only in source table<a name="line.233"></a>
+<span class="sourceLineNo">234</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> }<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int rowCmpRet = Bytes.compareTo(value.getRow(), currentCompareRowInPeerTable.getRow());<a name="line.237"></a>
+<span class="sourceLineNo">238</span> if (rowCmpRet == 0) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span> // rowkey is same, need to compare the content of the row<a name="line.239"></a>
+<span class="sourceLineNo">240</span> try {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> Result.compareResults(value, currentCompareRowInPeerTable);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.242"></a>
+<span class="sourceLineNo">243</span> if (verbose) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> LOG.info("Good row key: " + delimiter<a name="line.244"></a>
+<span class="sourceLineNo">245</span> + Bytes.toStringBinary(value.getRow()) + delimiter);<a name="line.245"></a>
+<span class="sourceLineNo">246</span> }<a name="line.246"></a>
+<span class="sourceLineNo">247</span> } catch (Exception e) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> logFailRowAndIncreaseCounter(context, Counters.CONTENT_DIFFERENT_ROWS, value);<a name="line.248"></a>
+<span class="sourceLineNo">249</span> }<a name="line.249"></a>
+<span class="sourceLineNo">250</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.250"></a>
<span class="sourceLineNo">251</span> break;<a name="line.251"></a>
-<span class="sourceLineNo">252</span> } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> // row only exists in peer table<a name="line.253"></a>
-<span class="sourceLineNo">254</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> currentCompareRowInPeerTable);<a name="line.255"></a>
-<span class="sourceLineNo">256</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span> }<a name="line.258"></a>
-<span class="sourceLineNo">259</span> }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span> private void logFailRowAndIncreaseCounter(Context context, Counters counter, Result row) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span> if (sleepMsBeforeReCompare > 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> Threads.sleep(sleepMsBeforeReCompare);<a name="line.263"></a>
-<span class="sourceLineNo">264</span> try {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> Result sourceResult = sourceTable.get(new Get(row.getRow()));<a name="line.265"></a>
-<span class="sourceLineNo">266</span> Result replicatedResult = replicatedTable.get(new Get(row.getRow()));<a name="line.266"></a>
-<span class="sourceLineNo">267</span> Result.compareResults(sourceResult, replicatedResult);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> if (!sourceResult.isEmpty()) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (verbose) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> LOG.info("Good row key (with recompare): " + delimiter + Bytes.toStringBinary(row.getRow())<a name="line.271"></a>
-<span class="sourceLineNo">272</span> + delimiter);<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> return;<a name="line.275"></a>
-<span class="sourceLineNo">276</span> } catch (Exception e) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> LOG.error("recompare fail after sleep, rowkey=" + delimiter +<a name="line.277"></a>
-<span class="sourceLineNo">278</span> Bytes.toStringBinary(row.getRow()) + delimiter);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> }<a name="line.280"></a>
-<span class="sourceLineNo">281</span> context.getCounter(counter).increment(1);<a name="line.281"></a>
-<span class="sourceLineNo">282</span> context.getCounter(Counters.BADROWS).increment(1);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> LOG.error(counter.toString() + ", rowkey=" + delimiter + Bytes.toStringBinary(row.getRow()) +<a name="line.283"></a>
-<span class="sourceLineNo">284</span> delimiter);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span> @Override<a name="line.287"></a>
-<span class="sourceLineNo">288</span> protected void cleanup(Context context) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span> if (replicatedScanner != null) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> try {<a name="line.290"></a>
-<span class="sourceLineNo">291</span> while (currentCompareRowInPeerTable != null) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.292"></a>
-<span class="sourceLineNo">293</span> currentCompareRowInPeerTable);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> } catch (Exception e) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> LOG.error("fail to scan peer table in cleanup", e);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> } finally {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> replicatedScanner.close();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> replicatedScanner = null;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> }<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span> if (sourceTable != null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span> try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span> sourceTable.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> LOG.error("fail to close source table in cleanup", e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span> if(sourceConnection != null){<a name="line.311"></a>
-<span class="sourceLineNo">312</span> try {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> sourceConnection.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span> } catch (Exception e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> LOG.error("fail to close source connection in cleanup", e);<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> if(replicatedTable != null){<a name="line.319"></a>
-<span class="sourceLineNo">320</span> try{<a name="line.320"></a>
-<span class="sourceLineNo">321</span> replicatedTable.close();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> } catch (Exception e) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> LOG.error("fail to close replicated table in cleanup", e);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> }<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> if(replicatedConnection != null){<a name="line.326"></a>
-<span class="sourceLineNo">327</span> try {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> replicatedConnection.close();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (Exception e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.error("fail to close replicated connection in cleanup", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<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> }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> private static Pair<ReplicationPeerConfig, Configuration> getPeerQuorumConfig(<a name="line.336"></a>
-<span class="sourceLineNo">337</span> final Configuration conf, String peerId) throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ZKWatcher localZKW = null;<a name="line.338"></a>
-<span class="sourceLineNo">339</span> try {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> localZKW = new ZKWatcher(conf, "VerifyReplication", new Abortable() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public void abort(String why, Throwable e) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">252</span> } else if (rowCmpRet < 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span> // row only exists in source table<a name="line.253"></a>
+<span class="sourceLineNo">254</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.254"></a>
+<span class="sourceLineNo">255</span> break;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> // row only exists in peer table<a name="line.257"></a>
+<span class="sourceLineNo">258</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.258"></a>
+<span class="sourceLineNo">259</span> currentCompareRowInPeerTable);<a name="line.259"></a>
+<span class="sourceLineNo">260</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.260"></a>
+<span class="sourceLineNo">261</span> }<a name="line.261"></a>
+<span class="sourceLineNo">262</span> }<a name="line.262"></a>
+<span class="sourceLineNo">263</span> }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span> private void logFailRowAndIncreaseCounter(Context context, Counters counter, Result row) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> if (sleepMsBeforeReCompare > 0) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> Threads.sleep(sleepMsBeforeReCompare);<a name="line.267"></a>
+<span class="sourceLineNo">268</span> try {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> Result sourceResult = sourceTable.get(new Get(row.getRow()));<a name="line.269"></a>
+<span class="sourceLineNo">270</span> Result replicatedResult = replicatedTable.get(new Get(row.getRow()));<a name="line.270"></a>
+<span class="sourceLineNo">271</span> Result.compareResults(sourceResult, replicatedResult);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> if (!sourceResult.isEmpty()) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (verbose) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> LOG.info("Good row key (with recompare): " + delimiter + Bytes.toStringBinary(row.getRow())<a name="line.275"></a>
+<span class="sourceLineNo">276</span> + delimiter);<a name="line.276"></a>
+<span class="sourceLineNo">277</span> }<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span> return;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> } catch (Exception e) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> LOG.error("recompare fail after sleep, rowkey=" + delimiter +<a name="line.281"></a>
+<span class="sourceLineNo">282</span> Bytes.toStringBinary(row.getRow()) + delimiter);<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> context.getCounter(counter).increment(1);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> context.getCounter(Counters.BADROWS).increment(1);<a name="line.286"></a>
+<span class="sourceLineNo">287</span> LOG.error(counter.toString() + ", rowkey=" + delimiter + Bytes.toStringBinary(row.getRow()) +<a name="line.287"></a>
+<span class="sourceLineNo">288</span> delimiter);<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> protected void cleanup(Context context) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> if (replicatedScanner != null) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span> while (currentCompareRowInPeerTable != null) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.296"></a>
+<span class="sourceLineNo">297</span> currentCompareRowInPeerTable);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.298"></a>
+<span class="sourceLineNo">299</span> }<a name="line.299"></a>
+<span class="sourceLineNo">300</span> } catch (Exception e) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> LOG.error("fail to scan peer table in cleanup", e);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> } finally {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> replicatedScanner.close();<a name="line.303"></a>
+<span class="sourceLineNo">304</span> replicatedScanner = null;<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span> }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (sourceTable != null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> try {<a name="line.309"></a>
+<span class="sourceLineNo">310</span> sourceTable.close();<a name="line.310"></a>
+<span class="sourceLineNo">311</span> } catch (IOException e) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> LOG.error("fail to close source table in cleanup", e);<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> if(sourceConnection != null){<a name="line.315"></a>
+<span class="sourceLineNo">316</span> try {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> sourceConnection.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span> } catch (Exception e) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span> LOG.error("fail to close source connection in cleanup", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> }<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span> if(replicatedTable != null){<a name="line.323"></a>
+<span class="sourceLineNo">324</span> try{<a name="line.324"></a>
+<span class="sourceLineNo">325</span> replicatedTable.close();<a name="line.325"></a>
+<span class="sourceLineNo">326</span> } catch (Exception e) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> LOG.error("fail to close replicated table in cleanup", e);<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> if(replicatedConnection != null){<a name="line.330"></a>
+<span class="sourceLineNo">331</span> try {<a name="line.331"></a>
+<span class="sourceLineNo">332</span> replicatedConnection.close();<a name="line.332"></a>
+<span class="sourceLineNo">333</span> } catch (Exception e) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span> LOG.error("fail to close replicated connection in cleanup", e);<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> }<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private static Pair<ReplicationPeerConfig, Configuration> getPeerQuorumConfig(<a name="line.340"></a>
+<span class="sourceLineNo">341</span> final Configuration conf, String peerId) throws IOException {<a name="line.341"></a>
+<span class="sourceLineNo">342</span> ZKWatcher localZKW = null;<a name="line.342"></a>
+<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> localZKW = new ZKWatcher(conf, "VerifyReplication", new Abortable() {<a name="line.344"></a>
<span class="sourceLineNo">345</span> @Override<a name="line.345"></a>
-<span class="sourceLineNo">346</span> public boolean isAborted() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> return false;<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> });<a name="line.349"></a>
-<span class="sourceLineNo">350</span> ReplicationPeerStorage storage =<a name="line.350"></a>
-<span class="sourceLineNo">351</span> ReplicationStorageFactory.getReplicationPeerStorage(localZKW, conf);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> ReplicationPeerConfig peerConfig = storage.getPeerConfig(peerId);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return Pair.newPair(peerConfig,<a name="line.353"></a>
-<span class="sourceLineNo">354</span> ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf));<a name="line.354"></a>
-<span class="sourceLineNo">355</span> } catch (ReplicationException e) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span> throw new IOException("An error occurred while trying to connect to the remote peer cluster",<a name="line.356"></a>
-<span class="sourceLineNo">357</span> e);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> } finally {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> if (localZKW != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span> localZKW.close();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> }<a name="line.362"></a>
-<span class="sourceLineNo">363</span> }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> private void restoreSnapshotForPeerCluster(Configuration conf, String peerQuorumAddress)<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span> Configuration peerConf =<a name="line.367"></a>
-<span class="sourceLineNo">368</span> HBaseConfiguration.createClusterConf(conf, peerQuorumAddress, PEER_CONFIG_PREFIX);<a name="line.368"></a>
-<span class="sourceLineNo">369</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.369"></a>
-<span class="sourceLineNo">370</span> FSUtils.setRootDir(peerConf, new Path(peerFSAddress, peerHBaseRootAddress));<a name="line.370"></a>
-<span class="sourceLineNo">371</span> FileSystem fs = FileSystem.get(peerConf);<a name="line.371"></a>
-<span class="sourceLineNo">372</span> RestoreSnapshotHelper.copySnapshotForScanner(peerConf, fs, FSUtils.getRootDir(peerConf),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName);<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span> * Sets up the actual job.<a name="line.377"></a>
-<span class="sourceLineNo">378</span> *<a name="line.378"></a>
-<span class="sourceLineNo">379</span> * @param conf The current configuration.<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * @param args The command line parameters.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * @return The newly created job.<a name="line.381"></a>
-<span class="sourceLineNo">382</span> * @throws java.io.IOException When setting up the job fails.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> */<a name="line.383"></a>
-<span class="sourceLineNo">384</span> public Job createSubmittableJob(Configuration conf, String[] args)<a name="line.384"></a>
-<span class="sourceLineNo">385</span> throws IOException {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> if (!doCommandLine(args)) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return null;<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span> conf.set(NAME+".tableName", tableName);<a name="line.389"></a>
-<span class="sourceLineNo">390</span> conf.setLong(NAME+".startTime", startTime);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> conf.setLong(NAME+".endTime", endTime);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> conf.setInt(NAME +".sleepMsBeforeReCompare", sleepMsBeforeReCompare);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> conf.set(NAME + ".delimiter", delimiter);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> conf.setInt(NAME + ".batch", batch);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> conf.setBoolean(NAME +".verbose", verbose);<a name="line.395"></a>
-<span class="sourceLineNo">396</span> conf.setBoolean(NAME +".includeDeletedCells", includeDeletedCells);<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (families != null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span> conf.set(NAME+".families", families);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (rowPrefixes != null){<a name="line.400"></a>
-<span class="sourceLineNo">401</span> conf.set(NAME+".rowPrefixes", rowPrefixes);<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> String peerQuorumAddress;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> Pair<ReplicationPeerConfig, Configuration> peerConfigPair = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> if (peerId != null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> peerConfigPair = getPeerQuorumConfig(conf, peerId);<a name="line.407"></a>
-<span class="sourceLineNo">408</span> ReplicationPeerConfig peerConfig = peerConfigPair.getFirst();<a name="line.408"></a>
-<span class="sourceLineNo">409</span> peerQuorumAddress = peerConfig.getClusterKey();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress + ", Peer Configuration: " +<a name="line.410"></a>
-<span class="sourceLineNo">411</span> peerConfig.getConfiguration());<a name="line.411"></a>
-<span class="sourceLineNo">412</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.412"></a>
-<span class="sourceLineNo">413</span> HBaseConfiguration.setWithPrefix(conf, PEER_CONFIG_PREFIX,<a name="line.413"></a>
-<span class="sourceLineNo">414</span> peerConfig.getConfiguration().entrySet());<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> assert this.peerQuorumAddress != null;<a name="line.416"></a>
-<span class="sourceLineNo">417</span> peerQuorumAddress = this.peerQuorumAddress;<a name="line.417"></a>
-<span class="sourceLineNo">418</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress);<a name="line.418"></a>
-<span class="sourceLineNo">419</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> conf.setInt(NAME + ".versions", versions);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> LOG.info("Number of version: " + versions);<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> //Set Snapshot specific parameters<a name="line.425"></a>
-<span class="sourceLineNo">426</span> if (peerSnapshotName != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> conf.set(NAME + ".peerSnapshotName", peerSnapshotName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span> // for verifyRep by snapshot, choose a unique sub-directory under peerSnapshotTmpDir to<a name="line.429"></a>
-<span class="sourceLineNo">430</span> // restore snapshot.<a name="line.430"></a>
-<span class="sourceLineNo">431</span> Path restoreDir = new Path(peerSnapshotTmpDir, UUID.randomUUID().toString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span> peerSnapshotTmpDir = restoreDir.toString();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> conf.set(NAME + ".peerSnapshotTmpDir", peerSnapshotTmpDir);<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> conf.set(NAME + ".peerFSAddress", peerFSAddress);<a name="line.435"></a>
-<span class="sourceLineNo">436</span> conf.set(NAME + ".peerHBaseRootAddress", peerHBaseRootAddress);<a name="line.436"></a>
+<span class="sourceLineNo">346</span> public void abort(String why, Throwable e) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span> public boolean isAborted() {<a name="line.350"></a>
+<span class="sourceLineNo">351</span> return false;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> });<a name="line.353"></a>
+<span class="sourceLineNo">354</span> ReplicationPeerStorage storage =<a name="line.354"></a>
+<span class="sourceLineNo">355</span> ReplicationStorageFactory.getReplicationPeerStorage(localZKW, conf);<a name="line.355"></a>
+<span class="sourceLineNo">356</span> ReplicationPeerConfig peerConfig = storage.getPeerConfig(peerId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return Pair.newPair(peerConfig,<a name="line.357"></a>
+<span class="sourceLineNo">358</span> ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf));<a name="line.358"></a>
+<span class="sourceLineNo">359</span> } catch (ReplicationException e) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> throw new IOException("An error occurred while trying to connect to the remote peer cluster",<a name="line.360"></a>
+<span class="sourceLineNo">361</span> e);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> } finally {<a name="line.362"></a>
+<span class="sourceLineNo">363</span> if (localZKW != null) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> localZKW.close();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span> private void restoreSnapshotForPeerCluster(Configuration conf, String peerQuorumAddress)<a name="line.369"></a>
+<span class="sourceLineNo">370</span> throws IOException {<a name="line.370"></a>
+<span class="sourceLineNo">371</span> Configuration peerConf =<a name="line.371"></a>
+<span class="sourceLineNo">372</span> HBaseConfiguration.createClusterConf(conf, peerQuorumAddress, PEER_CONFIG_PREFIX);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> FSUtils.setRootDir(peerConf, new Path(peerFSAddress, peerHBaseRootAddress));<a name="line.374"></a>
+<span class="sourceLineNo">375</span> FileSystem fs = FileSystem.get(peerConf);<a name="line.375"></a>
+<span class="sourceLineNo">376</span> RestoreSnapshotHelper.copySnapshotForScanner(peerConf, fs, FSUtils.getRootDir(peerConf),<a name="line.376"></a>
+<span class="sourceLineNo">377</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName);<a name="line.377"></a>
+<span class="sourceLineNo">378</span> }<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> * Sets up the actual job.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> *<a name="line.382"></a>
+<span class="sourceLineNo">383</span> * @param conf The current configuration.<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * @param args The command line parameters.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * @return The newly created job.<a name="line.385"></a>
+<span class="sourceLineNo">386</span> * @throws java.io.IOException When setting up the job fails.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> */<a name="line.387"></a>
+<span class="sourceLineNo">388</span> public Job createSubmittableJob(Configuration conf, String[] args)<a name="line.388"></a>
+<span class="sourceLineNo">389</span> throws IOException {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> if (!doCommandLine(args)) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> return null;<a name="line.391"></a>
+<span class="sourceLineNo">392</span> }<a name="line.392"></a>
+<span class="sourceLineNo">393</span> conf.set(NAME+".tableName", tableName);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> conf.setLong(NAME+".startTime", startTime);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> conf.setLong(NAME+".endTime", endTime);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> conf.setInt(NAME +".sleepMsBeforeReCompare", sleepMsBeforeReCompare);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> conf.set(NAME + ".delimiter", delimiter);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> conf.setInt(NAME + ".batch", batch);<a name="line.398"></a>
+<span class="sourceLineNo">399</span> conf.setBoolean(NAME +".verbose", verbose);<a name="line.399"></a>
+<span class="sourceLineNo">400</span> conf.setBoolean(NAME +".includeDeletedCells", includeDeletedCells);<a name="line.400"></a>
+<span class="sourceLineNo">401</span> if (families != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> conf.set(NAME+".families", families);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span> if (rowPrefixes != null){<a name="line.404"></a>
+<span class="sourceLineNo">405</span> conf.set(NAME+".rowPrefixes", rowPrefixes);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> String peerQuorumAddress;<a name="line.408"></a>
+<span class="sourceLineNo">409</span> Pair<ReplicationPeerConfig, Configuration> peerConfigPair = null;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> if (peerId != null) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> peerConfigPair = getPeerQuorumConfig(conf, peerId);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> ReplicationPeerConfig peerConfig = peerConfigPair.getFirst();<a name="line.412"></a>
+<span class="sourceLineNo">413</span> peerQuorumAddress = peerConfig.getClusterKey();<a name="line.413"></a>
+<span class="sourceLineNo">414</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress + ", Peer Configuration: " +<a name="line.414"></a>
+<span class="sourceLineNo">415</span> peerConfig.getConfiguration());<a name="line.415"></a>
+<span class="sourceLineNo">416</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.416"></a>
+<span class="sourceLineNo">417</span> HBaseConfiguration.setWithPrefix(conf, PEER_CONFIG_PREFIX,<a name="line.417"></a>
+<span class="sourceLineNo">418</span> peerConfig.getConfiguration().entrySet());<a name="line.418"></a>
+<span class="sourceLineNo">419</span> } else {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> assert this.peerQuorumAddress != null;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> peerQuorumAddress = this.peerQuorumAddress;<a name="line.421"></a>
+<span class="sourceLineNo">422</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress);<a name="line.422"></a>
+<span class="sourceLineNo">423</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.423"></a>
+<span class="sourceLineNo">424</span> }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> if (peerTableName != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span> LOG.info("Peer Table Name: " + peerTableName);<a name="line.427"></a>
+<span class="sourceLineNo">428</span> conf.set(NAME + ".peerTableName", peerTableName);<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> conf.setInt(NAME + ".versions", versions);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> LOG.info("Number of version: " + versions);<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> //Set Snapshot specific parameters<a name="line.434"></a>
+<span class="sourceLineNo">435</span> if (peerSnapshotName != null) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span> conf.set(NAME + ".peerSnapshotName", peerSnapshotName);<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span> // This is to create HDFS delegation token for peer cluster in case of secured<a name="line.438"></a>
-<span class="sourceLineNo">439</span> conf.setStrings(MRJobConfig.JOB_NAMENODES, peerFSAddress, conf.get(HConstants.HBASE_DIR));<a name="line.439"></a>
-<span class="sourceLineNo">440</span> }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span> Job job = Job.getInstance(conf, conf.get(JOB_NAME_CONF_KEY, NAME + "_" + tableName));<a name="line.442"></a>
-<span class="sourceLineNo">443</span> job.setJarByClass(VerifyReplication.class);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span> Scan scan = new Scan();<a name="line.445"></a>
-<span class="sourceLineNo">446</span> scan.setTimeRange(startTime, endTime);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> scan.setRaw(includeDeletedCells);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> scan.setCacheBlocks(false);<a name="line.448"></a>
-<span class="sourceLineNo">449</span> if (batch > 0) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> scan.setBatch(batch);<a name="line.450"></a>
-<span class="sourceLineNo">451</span> }<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (versions >= 0) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> scan.setMaxVersions(versions);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.info("Number of versions set to " + versions);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span> if(families != null) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span> String[] fams = families.split(",");<a name="line.457"></a>
-<span class="sourceLineNo">458</span> for(String fam : fams) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (sourceSnapshotName != null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> Path snapshotTempPath = new Path(sourceSnapshotTmpDir);<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.info(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> "Using source snapshot-" + sourceSnapshotName + " with temp dir:" + sourceSnapshotTmpDir);<a name="line.468"></a>
-<span class="sourceLineNo">469</span> TableMapReduceUtil.initTableSnapshotMapperJob(sourceSnapshotName, scan, Verifier.class, null,<a name="line.469"></a>
-<span class="sourceLineNo">470</span> null, job, true, snapshotTempPath);<a name="line.470"></a>
-<span class="sourceLineNo">471</span> restoreSnapshotForPeerCluster(conf, peerQuorumAddress);<a name="line.471"></a>
-<span class="sourceLineNo">472</span> } else {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> TableMapReduceUtil.initTableMapperJob(tableName, scan, Verifier.class, null, null, job);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span> if (peerId != null) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span> assert peerConfigPair != null;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> Configuration peerClusterConf = peerConfigPair.getSecond();<a name="line.478"></a>
-<span class="sourceLineNo">479</span> // Obtain the auth token from peer cluster<a name="line.479"></a>
-<span class="sourceLineNo">480</span> TableMapReduceUtil.initCredentialsForCluster(job, peerClusterConf);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span> job.setOutputFormatClass(NullOutputFormat.class);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> job.setNumReduceTasks(0);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> return job;<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span> private static void setRowPrefixFilter(Scan scan, String rowPrefixes) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> if (rowPrefixes != null && !rowPrefixes.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> String[] rowPrefixArray = rowPrefixes.split(",");<a name="line.490"></a>
-<span class="sourceLineNo">491</span> Arrays.sort(rowPrefixArray);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);<a name="line.492"></a>
-<span class="sourceLineNo">493</span> for (String prefix : rowPrefixArray) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span> Filter filter = new PrefixFilter(Bytes.toBytes(prefix));<a name="line.494"></a>
-<span class="sourceLineNo">495</span> filterList.addFilter(filter);<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span> scan.setFilter(filterList);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> byte[] startPrefixRow = Bytes.toBytes(rowPrefixArray[0]);<a name="line.498"></a>
-<span class="sourceLineNo">499</span> byte[] lastPrefixRow = Bytes.toBytes(rowPrefixArray[rowPrefixArray.length -1]);<a name="line.499"></a>
-<span class="sourceLineNo">500</span> setStartAndStopRows(scan, startPrefixRow, lastPrefixRow);<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> private static void setStartAndStopRows(Scan scan, byte[] startPrefixRow, byte[] lastPrefixRow) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span> scan.setStartRow(startPrefixRow);<a name="line.505"></a>
-<span class="sourceLineNo">506</span> byte[] stopRow = Bytes.add(Bytes.head(lastPrefixRow, lastPrefixRow.length - 1),<a name="line.506"></a>
-<span class="sourceLineNo">507</span> new byte[]{(byte) (lastPrefixRow[lastPrefixRow.length - 1] + 1)});<a name="line.507"></a>
-<span class="sourceLineNo">508</span> scan.setStopRow(stopRow);<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> @VisibleForTesting<a name="line.511"></a>
-<span class="sourceLineNo">512</span> public boolean doCommandLine(final String[] args) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span> if (args.length < 2) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> printUsage(null);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span> try {<a name="line.517"></a>
-<span class="sourceLineNo">518</span> for (int i = 0; i < args.length; i++) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span> String cmd = args[i];<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> printUsage(null);<a name="line.521"></a>
-<span class="sourceLineNo">522</span> return false;<a name="line.522"></a>
-<span class="sourceLineNo">523</span> }<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span> final String startTimeArgKey = "--starttime=";<a name="line.525"></a>
-<span class="sourceLineNo">526</span> if (cmd.startsWith(startTimeArgKey)) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> startTime = Long.parseLong(cmd.substring(startTimeArgKey.length()));<a name="line.527"></a>
-<span class="sourceLineNo">528</span> continue;<a name="line.528"></a>
-<span class="sourceLineNo">529</span> }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span> final String endTimeArgKey = "--endtime=";<a name="line.531"></a>
-<span class="sourceLineNo">532</span> if (cmd.startsWith(endTimeArgKey)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span> endTime = Long.parseLong(cmd.substring(endTimeArgKey.length()));<a name="line.533"></a>
-<span class="sourceLineNo">534</span> continue;<a name="line.534"></a>
-<span class="sourceLineNo">535</span> }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> final String includeDeletedCellsArgKey = "--raw";<a name="line.537"></a>
-<span class="sourceLineNo">538</span> if (cmd.equals(includeDeletedCellsArgKey)) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span> includeDeletedCells = true;<a name="line.539"></a>
-<span class="sourceLineNo">540</span> continue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span> }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span> final String versionsArgKey = "--versions=";<a name="line.543"></a>
-<span class="sourceLineNo">544</span> if (cmd.startsWith(versionsArgKey)) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> versions = Integer.parseInt(cmd.substring(versionsArgKey.length()));<a name="line.545"></a>
-<span class="sourceLineNo">546</span> continue;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span> final String batchArgKey = "--batch=";<a name="line.549"></a>
-<span class="sourceLineNo">550</span> if (cmd.startsWith(batchArgKey)) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> batch = Integer.parseInt(cmd.substring(batchArgKey.length()));<a name="line.551"></a>
-<span class="sourceLineNo">552</span> continue;<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> final String familiesArgKey = "--families=";<a name="line.555"></a>
-<span class="sourceLineNo">556</span> if (cmd.startsWith(familiesArgKey)) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> families = cmd.substring(familiesArgKey.length());<a name="line.557"></a>
-<span class="sourceLineNo">558</span> continue;<a name="line.558"></a>
-<span class="sourceLineNo">559</span> }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span> final String rowPrefixesKey = "--row-prefixes=";<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (cmd.startsWith(rowPrefixesKey)){<a name="line.562"></a>
-<span class="sourceLineNo">563</span> rowPrefixes = cmd.substring(rowPrefixesKey.length());<a name="line.563"></a>
-<span class="sourceLineNo">564</span> continue;<a name="line.564"></a>
-<span class="sourceLineNo">565</span> }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span> final String delimiterArgKey = "--delimiter=";<a name="line.567"></a>
-<span class="sourceLineNo">568</span> if (cmd.startsWith(delimiterArgKey)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> delimiter = cmd.substring(delimiterArgKey.length());<a name="line.569"></a>
-<span class="sourceLineNo">570</span> continue;<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> final String sleepToReCompareKey = "--recomparesleep=";<a name="line.573"></a>
-<span class="sourceLineNo">574</span> if (cmd.startsWith(sleepToReCompareKey)) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> sleepMsBeforeReCompare = Integer.parseInt(cmd.substring(sleepToReCompareKey.length()));<a name="line.575"></a>
-<span class="sourceLineNo">576</span> continue;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final String verboseKey = "--verbose";<a name="line.578"></a>
-<span class="sourceLineNo">579</span> if (cmd.startsWith(verboseKey)) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> verbose = true;<a name="line.580"></a>
-<span class="sourceLineNo">581</span> continue;<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> final String sourceSnapshotNameArgKey = "--sourceSnapshotName=";<a name="line.584"></a>
-<span class="sourceLineNo">585</span> if (cmd.startsWith(sourceSnapshotNameArgKey)) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span> sourceSnapshotName = cmd.substring(sourceSnapshotNameArgKey.length());<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> final String sourceSnapshotTmpDirArgKey = "--sourceSnapshotTmpDir=";<a name="line.590"></a>
-<span class="sourceLineNo">591</span> if (cmd.startsWith(sourceSnapshotTmpDirArgKey)) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> sourceSnapshotTmpDir = cmd.substring(sourceSnapshotTmpDirArgKey.length());<a name="line.592"></a>
-<span class="sourceLineNo">593</span> continue;<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> final String peerSnapshotNameArgKey = "--peerSnapshotName=";<a name="line.596"></a>
-<span class="sourceLineNo">597</span> if (cmd.startsWith(peerSnapshotNameArgKey)) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span> peerSnapshotName = cmd.substring(peerSnapshotNameArgKey.length());<a name="line.598"></a>
-<span class="sourceLineNo">599</span> continue;<a name="line.599"></a>
-<span class="sourceLineNo">600</span> }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span> final String peerSnapshotTmpDirArgKey = "--peerSnapshotTmpDir=";<a name="line.602"></a>
-<span class="sourceLineNo">603</span> if (cmd.startsWith(peerSnapshotTmpDirArgKey)) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> peerSnapshotTmpDir = cmd.substring(peerSnapshotTmpDirArgKey.length());<a name="line.604"></a>
-<span class="sourceLineNo">605</span> continue;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span> final String peerFSAddressArgKey = "--peerFSAddress=";<a name="line.608"></a>
-<span class="sourceLineNo">609</span> if (cmd.startsWith(peerFSAddressArgKey)) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span> peerFSAddress = cmd.substring(peerFSAddressArgKey.length());<a name="line.610"></a>
-<span class="sourceLineNo">611</span> continue;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> final String peerHBaseRootAddressArgKey = "--peerHBaseRootAddress=";<a name="line.614"></a>
-<span class="sourceLineNo">615</span> if (cmd.startsWith(peerHBaseRootAddressArgKey)) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span> peerHBaseRootAddress = cmd.substring(peerHBaseRootAddressArgKey.length());<a name="line.616"></a>
-<span class="sourceLineNo">617</span> continue;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span> if (cmd.startsWith("--")) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> printUsage("Invalid argument '" + cmd + "'");<a name="line.621"></a>
-<span class="sourceLineNo">622</span> return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> if (i == args.length-2) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span> if (isPeerQuorumAddress(cmd)) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> peerQuorumAddress = cmd;<a name="line.627"></a>
-<span class="sourceLineNo">628</span> } else {<a name="line.628"></a>
-<span class="sourceLineNo">629</span> peerId = cmd;<a name="line.629"></a>
-<span class="sourceLineNo">630</span> }<a name="line.630"></a>
-<span class="sourceLineNo">631</span> }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> if (i == args.length-1) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span> tableName = cmd;<a name="line.634"></a>
-<span class="sourceLineNo">635</span> }<a name="line.635"></a>
-<span class="sourceLineNo">636</span> }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span> if ((sourceSnapshotName != null && sourceSnapshotTmpDir == null)<a name="line.638"></a>
-<span class="sourceLineNo">639</span> || (sourceSnapshotName == null && sourceSnapshotTmpDir != null)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span> printUsage("Source snapshot name and snapshot temp location should be provided"<a name="line.640"></a>
-<span class="sourceLineNo">641</span> + " to use snapshots in source cluster");<a name="line.641"></a>
-<span class="sourceLineNo">642</span> return false;<a name="line.642"></a>
-<span class="sourceLineNo">643</span> }<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span> if (peerSnapshotName != null || peerSnapshotTmpDir != null || peerFSAddress != null<a name="line.645"></a>
-<span class="sourceLineNo">646</span> || peerHBaseRootAddress != null) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span> if (peerSnapshotName == null || peerSnapshotTmpDir == null || peerFSAddress == null<a name="line.647"></a>
-<span class="sourceLineNo">648</span> || peerHBaseRootAddress == null) {<a name="line.648"></a>
-<span class="sourceLineNo">649</span> printUsage(<a name="line.649"></a>
-<span class="sourceLineNo">650</span> "Peer snapshot name, peer snapshot temp location, Peer HBase root address and "<a name="line.650"></a>
-<span class="sourceLineNo">651</span> + "peer FSAddress should be provided to use snapshots in peer cluster");<a name="line.651"></a>
-<span class="sourceLineNo">652</span> return false;<a name="line.652"></a>
-<span class="sourceLineNo">653</span> }<a name="line.653"></a>
-<span class="sourceLineNo">654</span> }<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> // This is to avoid making recompare calls to source/peer tables when snapshots are used<a name="line.656"></a>
-<span class="sourceLineNo">657</span> if ((sourceSnapshotName != null || peerSnapshotName != null) && sleepMsBeforeReCompare > 0) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> printUsage(<a name="line.658"></a>
-<span class="sourceLineNo">659</span> "Using sleepMsBeforeReCompare along with snapshots is not allowed as snapshots are immutable");<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return false;<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> } catch (Exception e) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span> LOG.error("Failed to parse commandLine arguments", e);<a name="line.664"></a>
-<span class="sourceLineNo">665</span> printUsage("Can't start because " + e.getMessage());<a name="line.665"></a>
-<span class="sourceLineNo">666</span> return false;<a name="line.666"></a>
-<span class="sourceLineNo">667</span> }<a name="line.667"></a>
-<span class="sourceLineNo">668</span> return true;<a name="line.668"></a>
-<span class="sourceLineNo">669</span> }<a name="line.669"></a>
+<span class="sourceLineNo">438</span> // for verifyRep by snapshot, choose a unique sub-directory under peerSnapshotTmpDir to<a name="line.438"></a>
+<span class="sourceLineNo">439</span> // restore snapshot.<a name="line.439"></a>
+<span class="sourceLineNo">440</span> Path restoreDir = new Path(peerSnapshotTmpDir, UUID.randomUUID().toString());<a name="line.440"></a>
+<span class="sourceLineNo">441</span> peerSnapshotTmpDir = restoreDir.toString();<a name="line.441"></a>
+<span class="sourceLineNo">442</span> conf.set(NAME + ".peerSnapshotTmpDir", peerSnapshotTmpDir);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> conf.set(NAME + ".peerFSAddress", peerFSAddress);<a name="line.444"></a>
+<span class="sourceLineNo">445</span> conf.set(NAME + ".peerHBaseRootAddress", peerHBaseRootAddress);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> // This is to create HDFS delegation token for peer cluster in case of secured<a name="line.447"></a>
+<span class="sourceLineNo">448</span> conf.setStrings(MRJobConfig.JOB_NAMENODES, peerFSAddress, conf.get(HConstants.HBASE_DIR));<a name="line.448"></a>
+<span class="sourceLineNo">449</span> }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> Job job = Job.getInstance(conf, conf.get(JOB_NAME_CONF_KEY, NAME + "_" + tableName));<a name="line.451"></a>
+<span class="sourceLineNo">452</span> job.setJarByClass(VerifyReplication.class);<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> Scan scan = new Scan();<a name="line.454"></a>
+<span class="sourceLineNo">455</span> scan.setTimeRange(startTime, endTime);<a name="line.455"></a>
+<span class="sourceLineNo">456</span> scan.setRaw(includeDeletedCells);<a name="line.456"></a>
+<span class="sourceLineNo">457</span> scan.setCacheBlocks(false);<a name="line.457"></a>
+<span class="sourceLineNo">458</span> if (batch > 0) {<a name="line.458"></a>
+<span class="sourceLineNo">459</span> scan.setBatch(batch);<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> if (versions >= 0) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span> scan.setMaxVersions(versions);<a name="line.462"></a>
+<span class="sourceLineNo">463</span> LOG.info("Number of versions set to " + versions);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> }<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if(families != null) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span> String[] fams = families.split(",");<a name="line.466"></a>
+<span class="sourceLineNo">467</span> for(String fam : fams) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span> scan.addFamily(Bytes.toBytes(fam));<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> setRowPrefixFilter(scan, rowPrefixes);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span> if (sourceSnapshotName != null) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span> Path snapshotTempPath = new Path(sourceSnapshotTmpDir);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> LOG.info(<a name="line.476"></a>
+<span class="sourceLineNo">477</span> "Using source snapshot-" + sourceSnapshotName + " with temp dir:" + sourceSnapshotTmpDir);<a name="line.477"></a>
+<span class="sourceLineNo">478</span> TableMapReduceUtil.initTableSnapshotMapperJob(sourceSnapshotName, scan, Verifier.class, null,<a name="line.478"></a>
+<span class="sourceLineNo">479</span> null, job, true, snapshotTempPath);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> restoreSnapshotForPeerCluster(conf, peerQuorumAddress);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span> TableMapReduceUtil.initTableMapperJob(tableName, scan, Verifier.class, null, null, job);<a name="line.482"></a>
+<span class="sourceLineNo">483</span> }<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span> if (peerId != null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span> assert peerConfigPair != null;<a name="line.486"></a>
+<span class="sourceLineNo">487</span> Configuration peerClusterConf = peerConfigPair.getSecond();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> // Obtain the auth token from peer cluster<a name="line.488"></a>
+<span class="sourceLineNo">489</span> TableMapReduceUtil.initCredentialsForCluster(job, peerClusterConf);<a name="line.489"></a>
+<span class="sourceLineNo">490</span> }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span> job.setOutputFormatClass(NullOutputFormat.class);<a name="line.492"></a>
+<span class="sourceLineNo">493</span> job.setNumReduceTasks(0);<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return job;<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> private static void setRowPrefixFilter(Scan scan, String rowPrefixes) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> if (rowPrefixes != null && !rowPrefixes.isEmpty()) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span> String[] rowPrefixArray = rowPrefixes.split(",");<a name="line.499"></a>
+<span class="sourceLineNo">500</span> Arrays.sort(rowPrefixArray);<a name="line.500"></a>
+<span class="sourceLineNo">501</span> FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> for (String prefix : rowPrefixArray) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span> Filter filter = new PrefixFilter(Bytes.toBytes(prefix));<a name="line.503"></a>
+<span class="sourceLineNo">504</span> filterList.addFilter(filter);<a name="line.504"></a>
+<span class="sourceLineNo">505</span> }<a name="line.505"></a>
+<span class="sourceLineNo">506</span> scan.setFilter(filterList);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> byte[] startPrefixRow = Bytes.toBytes(rowPrefixArray[0]);<a name="line.507"></a>
+<span class="sourceLineNo">508</span> byte[] lastPrefixRow = Bytes.toBytes(rowPrefixArray[rowPrefixArray.length -1]);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> setStartAndStopRows(scan, startPrefixRow, lastPrefixRow);<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span> private static void setStartAndStopRows(Scan scan, byte[] startPrefixRow, byte[] lastPrefixRow) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span> scan.setStartRow(startPrefixRow);<a name="line.514"></a>
+<span class="sourceLineNo">515</span> byte[] stopRow = Bytes.add(Bytes.head(lastPrefixRow, lastPrefixRow.length - 1),<a name="line.515"></a>
+<span class="sourceLineNo">516</span> new byte[]{(byte) (lastPrefixRow[lastPrefixRow.length - 1] + 1)});<a name="line.516"></a>
+<span class="sourceLineNo">517</span> scan.setStopRow(stopRow);<a name="line.517"></a>
+<span class="sourceLineNo">518</span> }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span> @VisibleForTesting<a name="line.520"></a>
+<span class="sourceLineNo">521</span> public boolean doCommandLine(final String[] args) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> if (args.length < 2) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span> printUsage(null);<a name="line.523"></a>
+<span class="sourceLineNo">524</span> return false;<a name="line.524"></a>
+<span class="sourceLineNo">525</span> }<a name="line.525"></a>
+<span class="sourceLineNo">526</span> try {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> for (int i = 0; i < args.length; i++) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span> String cmd = args[i];<a name="line.528"></a>
+<span class="sourceLineNo">529</span> if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.529"></a>
+<span class="sourceLineNo">530</span> printUsage(null);<a name="line.530"></a>
+<span class="sourceLineNo">531</span> return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span> }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span> final String startTimeArgKey = "--starttime=";<a name="line.534"></a>
+<span class="sourceLineNo">535</span> if (cmd.startsWith(startTimeArgKey)) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span> startTime = Long.parseLong(cmd.substring(startTimeArgKey.length()));<a name="line.536"></a>
+<span class="sourceLineNo">537</span> continue;<a name="line.537"></a>
+<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span> final String endTimeArgKey = "--endtime=";<a name="line.540"></a>
+<span class="sourceLineNo">541</span> if (cmd.startsWith(endTimeArgKey)) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span> endTime = Long.parseLong(cmd.substring(endTimeArgKey.length()));<a name="line.542"></a>
+<span class="sourceLineNo">543</span> continue;<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> final String includeDeletedCellsArgKey = "--raw";<a name="line.546"></a>
+<span class="sourceLineNo">547</span> if (cmd.equals(includeDeletedCellsArgKey)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> includeDeletedCells = true;<a name="line.548"></a>
+<span class="sourceLineNo">549</span> continue;<a name="line.549"></a>
+<span class="sourceLineNo">550</span> }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span> final String versionsArgKey = "--versions=";<a name="line.552"></a>
+<span class="sourceLineNo">553</span> if (cmd.startsWith(versionsArgKey)) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> versions = Integer.parseInt(cmd.substring(versionsArgKey.length()));<a name="line.554"></a>
+<span class="sourceLineNo">555</span> continue;<a name="line.555"></a>
+<span class="sourceLineNo">556</span> }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span> final String batchArgKey = "--batch=";<a name="line.558"></a>
+<span class="sourceLineNo">559</span> if (cmd.startsWith(batchArgKey)) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span> batch = Integer.parseInt(cmd.substring(batchArgKey.length()));<a name="line.560"></a>
+<span class="sourceLineNo">561</span> continue;<a name="line.561"></a>
+<span class="sourceLineNo">562</span> }<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">564</span> final String familiesArgKey = "--families=";<a name="line.564"></a>
+<span class="sourceLineNo">565</span> if (cmd.startsWith(familiesArgKey)) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span> families = cmd.substring(familiesArgKey.length());<a name="line.566"></a>
+<span class="sourceLineNo">567</span> continue;<a name="line.567"></a>
+<span class="sourceLineNo">568</span> }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span> final String rowPrefixesKey = "--row-prefixes=";<a name="line.570"></a>
+<span class="sourceLineNo">571</span> if (cmd.startsWith(rowPrefixesKey)){<a name="line.571"></a>
+<span class="sourceLineNo">572</span> rowPrefixes = cmd.substring(rowPrefixesKey.length());<a name="line.572"></a>
+<span class="sourceLineNo">573</span> continue;<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> final String delimiterArgKey = "--delimiter=";<a name="line.576"></a>
+<span class="sourceLineNo">577</span> if (cmd.startsWith(delimiterArgKey)) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span> delimiter = cmd.substring(delimiterArgKey.length());<a name="line.578"></a>
+<span class="sourceLineNo">579</span> continue;<a name="line.579"></a>
+<span class="sourceLineNo">580</span> }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span> final String sleepToReCompareKey = "--recomparesleep=";<a name="line.582"></a>
+<span class="sourceLineNo">583</span> if (cmd.startsWith(sleepToReCompareKey)) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> sleepMsBeforeReCompare = Integer.parseInt(cmd.substring(sleepToReCompareKey.length()));<a name="line.584"></a>
+<span class="sourceLineNo">585</span> continue;<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<a name="line.586"></a>
+<span class="sourceLineNo">587</span> final String verboseKey = "--verbose";<a name="line.587"></a>
+<span class="sourceLineNo">588</span> if (cmd.startsWith(verboseKey)) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span> verbose = true;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> continue;<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span> final String sourceSnapshotNameArgKey = "--sourceSnapshotName=";<a name="line.593"></a>
+<span class="sourceLineNo">594</span> if (cmd.startsWith(sourceSnapshotNameArgKey)) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span> sourceSnapshotName = cmd.substring(sourceSnapshotNameArgKey.length());<a name="line.595"></a>
+<span class="sourceLineNo">596</span> continue;<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> final String sourceSnapshotTmpDirArgKey = "--sourceSnapshotTmpDir=";<a name="line.599"></a>
+<span class="sourceLineNo">600</span> if (cmd.startsWith(sourceSnapshotTmpDirArgKey)) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span> sourceSnapshotTmpDir = cmd.substring(sourceSnapshotTmpDirArgKey.length());<a name="line.601"></a>
+<span class="sourceLineNo">602</span> continue;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span> final String peerSnapshotNameArgKey = "--peerSnapshotName=";<a name="line.605"></a>
+<span class="sourceLineNo">606</span> if (cmd.startsWith(peerSnapshotNameArgKey)) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span> peerSnapshotName = cmd.substring(peerSnapshotNameArgKey.length());<a name="line.607"></a>
+<span class="sourceLineNo">608</span> continue;<a name="line.608"></a>
+<span class="sourceLineNo">609</span> }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span> final String peerSnapshotTmpDirArgKey = "--peerSnapshotTmpDir=";<a name="line.611"></a>
+<span class="sourceLineNo">612</span> if (cmd.startsWith(peerSnapshotTmpDirArgKey)) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span> peerSnapshotTmpDir = cmd.substring(peerSnapshotTmpDirArgKey.length());<a name="line.613"></a>
+<span class="sourceLineNo">614</span> continue;<a name="line.614"></a>
+<span class="sourceLineNo">615</span> }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span> final String peerFSAddressArgKey = "--peerFSAddress=";<a name="line.617"></a>
+<span class="sourceLineNo">618</span> if (cmd.startsWith(peerFSAddressArgKey)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> peerFSAddress = cmd.substring(peerFSAddressArgKey.length());<a name="line.619"></a>
+<span class="sourceLineNo">620</span> continue;<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> final String peerHBaseRootAddressArgKey = "--peerHBaseRootAddress=";<a name="line.623"></a>
+<span class="sourceLineNo">624</span> if (cmd.startsWith(peerHBaseRootAddressArgKey)) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span> peerHBaseRootAddress = cmd.substring(peerHBaseRootAddressArgKey.length());<a name="line.625"></a>
+<span class="sourceLineNo">626</span> continue;<a name="line.626"></a>
+<span class="sourceLineNo">627</span> }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span> final String peerTableNameArgKey = "--peerTableName=";<a name="line.629"></a>
+<span class="sourceLineNo">630</span> if (cmd.startsWith(peerTableNameArgKey)) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span> peerTableName = cmd.substring(peerTableNameArgKey.length());<a name="line.631"></a>
+<span class="sourceLineNo">632</span> continue;<a name="line.632"></a>
+<span class="sourceLineNo">633</span> }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span> if (cmd.startsWith("--")) {<a name="line.635"></a>
+<span class="sourceLineNo">636</span> printUsage("Invalid argument '" + cmd + "'");<a name="line.636"></a>
+<span class="sourceLineNo">637</span> return false;<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span> if (i == args.length-2) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span> if (isPeerQuorumAddress(cmd)) {<a name="line.641"></a>
+<span class="sourceLineNo">642</span> peerQuorumAddress = cmd;<a name="line.642"></a>
+<span class="sourceLineNo">643</span> } else {<a name="line.643"></a>
+<span class="sourceLineNo">644</span> peerId = cmd;<a name="line.644"></a>
+<span class="sourceLineNo">645</span> }<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span> if (i == args.length-1) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span> tableName = cmd;<a name="line.649"></a>
+<span class="sourceLineNo">650</span> }<a name="line.650"></a>
+<span class="sourceLineNo">651</span> }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span> if ((sourceSnapshotName != null && sourceSnapshotTmpDir == null)<a name="line.653"></a>
+<span class="sourceLineNo">654</span> || (sourceSnapshotName == null && sourceSnapshotTmpDir != null)) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> printUsage("Source snapshot name and snapshot temp location should be provided"<a name="line.655"></a>
+<span class="sourceLineNo">656</span> + " to use snapshots in source cluster");<a name="line.656"></a>
+<span class="sourceLineNo">657</span> return false;<a name="line.657"></a>
+<span class="sourceLineNo">658</span> }<a name="line.658"></a>
+<span class="sourceLineNo">659</span><a name="line.659"></a>
+<span class="sourceLineNo">660</span> if (peerSnapshotName != null || peerSnapshotTmpDir != null || peerFSAddress != null<a name="line.660"></a>
+<span class="sourceLineNo">661</span> || peerHBaseRootAddress != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span> if (peerSnapshotName == null || peerSnapshotTmpDir == null || peerFSAddress == null<a name="line.662"></a>
+<span class="sourceLineNo">663</span> || peerHBaseRootAddress == null) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span> printUsage(<a name="line.664"></a>
+<span class="sourceLineNo">665</span> "Peer snapshot name, peer snapshot temp location, Peer HBase root address and "<a name="line.665"></a>
+<span class="sourceLineNo">666</span> + "peer FSAddress should be provided to use snapshots in peer cluster");<a name="line.666"></a>
+<span class="sourceLineNo">667</span> return false;<a name="line.667"></a>
+<span class="sourceLineNo">668</span> }<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> private boolean isPeerQuorumAddress(String cmd) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span> ZKConfig.validateClusterKey(cmd);<a name="line.673"></a>
-<span class="sourceLineNo">674</span> } catch (IOException e) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> // not a quorum address<a name="line.675"></a>
-<span class="sourceLineNo">676</span> return false;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> }<a name="line.677"></a>
-<span class="sourceLineNo">678</span> return true;<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>
-<span class="sourceLineNo">682</span> * @param errorMsg Error message. Can be null.<a name="line.682"></a>
-<span class="sourceLineNo">683</span> */<a name="line.683"></a>
-<span class="sourceLineNo">684</span> private static void printUsage(final String errorMsg) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> if (errorMsg != null && errorMsg.length() > 0) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> System.err.println("ERROR: " + errorMsg);<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
-<span class="sourceLineNo">688</span> System.err.println("Usage: verifyrep [--starttime=X]" +<a name="line.688"></a>
-<span class="sourceLineNo">689</span> " [--endtime=Y] [--families=A] [--row-prefixes=B] [--delimiter=] [--recomparesleep=] " +<a name="line.689"></a>
-<span class="sourceLineNo">690</span> "[--batch=] [--verbose] [--sourceSnapshotName=P] [--sourceSnapshotTmpDir=Q] "<a name="line.690"></a>
-<span class="sourceLineNo">691</span> + "[--peerSnapshotName=R] [--peerSnapshotTmpDir=S] [--peerFSAddress=T] "<a name="line.691"></a>
-<span class="sourceLineNo">692</span> + "[--peerHBaseRootAddress=U] <peerid|peerQuorumAddress> <tablename>");<a name="line.692"></a>
-<span class="sourceLineNo">693</span> System.err.println();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> System.err.println("Options:");<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.err.println(" starttime beginning of the time range");<a name="line.695"></a>
-<span class="sourceLineNo">696</span> System.err.println(" without endtime means from starttime to forever");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> System.err.println(" endtime end of the time range");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> System.err.println(" versions number of cell versions to verify");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> System.err.println(" batch batch count for scan, " +<a name="line.699"></a>
-<span class="sourceLineNo">700</span> "note that result row counts will no longer be actual number of rows when you use this option");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> System.err.println(" raw includes raw scan if given in options");<a name="line.701"></a>
-<span class="sourceLineNo">702</span> System.err.println(" families comma-separated list of families to copy");<a name="line.702"></a>
-<span class="sourceLineNo">703</span> System.err.println(" row-prefixes comma-separated list of row key prefixes to filter on ");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> System.err.println(" delimiter the delimiter used in display around rowkey");<a name="line.704"></a>
-<span class="sourceLineNo">705</span> System.err.println(" recomparesleep milliseconds to sleep before recompare row, " +<a name="line.705"></a>
-<span class="sourceLineNo">706</span> "default value is 0 which disables the recompare.");<a name="line.706"></a>
-<span class="sourceLineNo">707</span> System.err.println(" verbose logs row keys of good rows");<a name="line.707"></a>
-<span class="sourceLineNo">708</span> System.err.println(" sourceSnapshotName Source Snapshot Name");<a name="line.708"></a>
-<span class="sourceLineNo">709</span> System.err.println(" sourceSnapshotTmpDir Tmp location to restore source table snapshot");<a name="line.709"></a>
-<span class="sourceLineNo">710</span> System.err.println(" peerSnapshotName Peer Snapshot Name");<a name="line.710"></a>
-<span class="sourceLineNo">711</span> System.err.println(" peerSnapshotTmpDir Tmp location to restore peer table snapshot");<a name="line.711"></a>
-<span class="sourceLineNo">712</span> System.err.println(" peerFSAddress Peer cluster Hadoop FS address");<a name="line.712"></a>
-<span class="sourceLineNo">713</span> System.err.println(" peerHBaseRootAddress Peer cluster HBase root location");<a name="line.713"></a>
-<span class="sourceLineNo">714</span> System.err.println();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> System.err.println("Args:");<a name="line.715"></a>
-<span class="sourceLineNo">716</span> System.err.println(" peerid Id of the peer used for verification, must match the one given for replication");<a name="line.716"></a>
-<span class="sourceLineNo">717</span> System.err.println(" peerQuorumAddress quorumAdress of the peer used for verification. The "<a name="line.717"></a>
-<span class="sourceLineNo">718</span> + "format is zk_quorum:zk_port:zk_hbase_path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> System.err.println(" tablename Name of the table to verify");<a name="line.719"></a>
-<span class="sourceLineNo">720</span> System.err.println();<a name="line.720"></a>
-<span class="sourceLineNo">721</span> System.err.println("Examples:");<a name="line.721"></a>
-<span class="sourceLineNo">722</span> System.err.println(" To verify the data replicated from TestTable for a 1 hour window with peer #5 ");<a name="line.722"></a>
-<span class="sourceLineNo">723</span> System.err.println(" $ hbase " +<a name="line.723"></a>
-<span class="sourceLineNo">724</span> "org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication" +<a name="line.724"></a>
-<span class="sourceLineNo">725</span> " --starttime=1265875194289 --endtime=1265878794289 5 TestTable ");<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> @Override<a name="line.728"></a>
-<span class="sourceLineNo">729</span> public int run(String[] args) throws Exception {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> Configuration conf = this.getConf();<a name="line.730"></a>
-<span class="sourceLineNo">731</span> Job job = createSubmittableJob(conf, args);<a name="line.731"></a>
-<span class="sourceLineNo">732</span> if (job != null) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span> return job.waitForCompletion(true) ? 0 : 1;<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span> return 1;<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> /**<a name="line.738"></a>
-<span class="sourceLineNo">739</span> * Main entry point.<a name="line.739"></a>
-<span class="sourceLineNo">740</span> *<a name="line.740"></a>
-<span class="sourceLineNo">741</span> * @param args The command line parameters.<a name="line.741"></a>
-<span class="sourceLineNo">742</span> * @throws Exception When running the job fails.<a name="line.742"></a>
-<span class="sourceLineNo">743</span> */<a name="line.743"></a>
-<span class="sourceLineNo">744</span> public static void main(String[] args) throws Exception {<a name="line.744"></a>
-<span class="sourceLineNo">745</span> int res = ToolRunner.run(HBaseConfiguration.create(), new VerifyReplication(), args);<a name="line.745"></a>
-<span class="sourceLineNo">746</span> System.exit(res);<a name="line.746"></a>
-<span class="sourceLineNo">747</span> }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>}<a name="line.748"></a>
+<span class="sourceLineNo">671</span> // This is to avoid making recompare calls to source/peer tables when snapshots are used<a name="line.671"></a>
+<span class="sourceLineNo">672</span> if ((sourceSnapshotName != null || peerSnapshotName != null) && sleepMsBeforeReCompare > 0) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span> printUsage(<a name="line.673"></a>
+<span class="sourceLineNo">674</span> "Using sleepMsBeforeReCompare along with snapshots is not allowed as snapshots are immutable");<a name="line.674"></a>
+<span class="sourceLineNo">675</span> return false;<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span> } catch (Exception e) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span> LOG.error("Failed to parse commandLine arguments", e);<a name="line.679"></a>
+<span class="sourceLineNo">680</span> printUsage("Can't start because " + e.getMessage());<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return false;<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> return true;<a name="line.683"></a>
+<span class="sourceLineNo">684</span> }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span> private boolean isPeerQuorumAddress(String cmd) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span> try {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> ZKConfig.validateClusterKey(cmd);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> } catch (IOException e) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span> // not a quorum address<a name="line.690"></a>
+<span class="sourceLineNo">691</span> return false;<a name="line.691"></a>
+<span class="sourceLineNo">692</span> }<a name="line.692"></a>
+<span class="sourceLineNo">693</span> return true;<a name="line.693"></a>
+<span class="sourceLineNo">694</span> }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> /*<a name="line.696"></a>
+<span class="sourceLineNo">697</span> * @param errorMsg Error message. Can be null.<a name="line.697"></a>
+<span class="sourceLineNo">698</span> */<a name="line.698"></a>
+<span class="sourceLineNo">699</span> private static void printUsage(final String errorMsg) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> if (errorMsg != null && errorMsg.length() > 0) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span> System.err.println("ERROR: " + errorMsg);<a name="line.701"></a>
+<span class="sourceLineNo">702</span> }<a name="line.702"></a>
+<span class="sourceLineNo">703</span> System.err.println("Usage: verifyrep [--starttime=X]"<a name="line.703"></a>
+<span class="sourceLineNo">704</span> + " [--endtime=Y] [--families=A] [--row-prefixes=B] [--delimiter=] [--recomparesleep=] "<a name="line.704"></a>
+<span class="sourceLineNo">705</span> + "[--batch=] [--verbose] [--peerTableName=] [--sourceSnapshotName=P] "<a name="line.705"></a>
+<span class="sourceLineNo">706</span> + "[--sourceSnapshotTmpDir=Q] [--peerSnapshotName=R] [--peerSnapshotTmpDir=S] "<a name="line.706"></a>
+<span class="sourceLineNo">707</span> + "[--peerFSAddress=T] [--peerHBaseRootAddress=U] <peerid|peerQuorumAddress> <tablename>");<a name="line.707"></a>
+<span class="sourceLineNo">708</span> System.err.println();<a name="line.708"></a>
+<span class="sourceLineNo">709</span> System.err.println("Options:");<a name="line.709"></a>
+<span class="sourceLineNo">710</span> System.err.println(" starttime beginning of the time range");<a name="line.710"></a>
+<span class="sourceLineNo">711</span> System.err.println(" without endtime means from starttime to forever");<a name="line.711"></a>
+<span class="sourceLineNo">712</span> System.err.println(" endtime end of the time range");<a name="line.712"></a>
+<span class="sourceLineNo">713</span> System.err.println(" versions number of cell versions to verify");<a name="line.713"></a>
+<span class="sourceLineNo">714</span> System.err.println(" batch batch count for scan, " +<a name="line.714"></a>
+<span class="sourceLineNo">715</span> "note that result row counts will no longer be actual number of rows when you use this option");<a name="line.715"></a>
+<span class="sourceLineNo">716</span> System.err.println(" raw includes raw scan if given in options");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> System.err.println(" families comma-separated list of families to copy");<a name="line.717"></a>
+<span class="sourceLineNo">718</span> System.err.println(" row-prefixes comma-separated list of row key prefixes to filter on ");<a name="line.718"></a>
+<span class="sourceLineNo">719</span> System.err.println(" delimiter the delimiter used in display around rowkey");<a name="line.719"></a>
+<span class="sourceLineNo">720</span> System.err.println(" recomparesleep milliseconds to sleep before recompare row, " +<a name="line.720"></a>
+<span class="sourceLineNo">721</span> "default value is 0 which disables the recompare.");<a name="line.721"></a>
+<span class="sourceLineNo">722</span> System.err.println(" verbose logs row keys of good rows");<a name="line.722"></a>
+<span class="sourceLineNo">723</span> System.err.println(" peerTableName Peer Table Name");<a name="line.723"></a>
+<span class="sourceLineNo">724</span> System.err.println(" sourceSnapshotName Source Snapshot Name");<a name="line.724"></a>
+<span class="sourceLineNo">725</span> System.err.println(" sourceSnapshotTmpDir Tmp location to restore source table snapshot");<a name="line.725"></a>
+<span class="sourceLineNo">726</span> System.err.println(" peerSnapshotName Peer Snapshot Name");<a name="line.726"></a>
+<span class="sourceLineNo">727</span> System.err.println(" peerSnapshotTmpDir Tmp location to restore peer table snapshot");<a name="line.727"></a>
+<span class="sourceLineNo">728</span> System.err.println(" peerFSAddress Peer cluster Hadoop FS address");<a name="line.728"></a>
+<span class="sourceLineNo">729</span> System.err.println(" peerHBaseRootAddress Peer cluster HBase root location");<a name="line.729"></a>
+<span class="sourceLineNo">730</span> System.err.println();<a name="line.730"></a>
+<span class="sourceLineNo">731</span> System.err.println("Args:");<a name="line.731"></a>
+<span class="sourceLineNo">732</span> System.err.println(" peerid Id of the peer used for verification, must match the one given for replication");<a name="line.732"></a>
+<span class="sourceLineNo">733</span> System.err.println(" peerQuorumAddress quorumAdress of the peer used for verification. The "<a name="line.733"></a>
+<span class="sourceLineNo">734</span> + "format is zk_quorum:zk_port:zk_hbase_path");<a name="line.734"></a>
+<span class="sourceLineNo">735</span> System.err.println(" tablename Name of the table to verify");<a name="line.735"></a>
+<span class="sourceLineNo">736</span> System.err.println();<a name="line.736"></a>
+<span class="sourceLineNo">737</span> System.err.println("Examples:");<a name="line.737"></a>
+<span class="sourceLineNo">738</span> System.err.println(" To verify the data replicated from TestTable for a 1 hour window with peer #5 ");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> System.err.println(" $ hbase " +<a name="line.739"></a>
+<span class="sourceLineNo">740</span> "org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication" +<a name="line.740"></a>
+<span class="sourceLineNo">741</span> " --starttime=1265875194289 --endtime=1265878794289 5 TestTable ");<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> @Override<a name="line.744"></a>
+<span class="sourceLineNo">745</span> public int run(String[] args) throws Exception {<a name="line.745"></a>
+<span class="sourceLineNo">746</span> Configuration conf = this.getConf();<a name="line.746"></a>
+<span class="sourceLineNo">747</span> Job job = createSubmittableJob(conf, args);<a name="line.747"></a>
+<span class="sourceLineNo">748</span> if (job != null) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return job.waitForCompletion(true) ? 0 : 1;<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> return 1;<a name="line.751"></a>
+<span class="sourceLineNo">752</span> }<a name="line.752"></a>
+<span class="sourceLineNo">753</span><a name="line.753"></a>
+<span class="sourceLineNo">754</span> /**<a name="line.754"></a>
+<span class="sourceLineNo">755</span> * Main entry point.<a name="line.755"></a>
+<span class="sourceLineNo">756</span> *<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * @param args The command line parameters.<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * @throws Exception When running the job fails.<a name="line.758"></a>
+<span class="sourceLineNo">759</span> */<a name="line.759"></a>
+<span class="sourceLineNo">760</span> public static void main(String[] args) throws Exception {<a name="line.760"></a>
+<span class="sourceLineNo">761</span> int res = ToolRunner.run(HBaseConfiguration.create(), new VerifyReplication(), args);<a name="line.761"></a>
+<span class="sourceLineNo">762</span> System.exit(res);<a name="line.762"></a>
+<span class="sourceLineNo">763</span> }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>}<a name="line.764"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
index 47325cd..b16e963 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.html
@@ -122,638 +122,654 @@
<span class="sourceLineNo">114</span> String peerFSAddress = null;<a name="line.114"></a>
<span class="sourceLineNo">115</span> //Peer cluster HBase root dir location<a name="line.115"></a>
<span class="sourceLineNo">116</span> String peerHBaseRootAddress = null;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span> private final static String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.119"></a>
+<span class="sourceLineNo">117</span> //Peer Table Name<a name="line.117"></a>
+<span class="sourceLineNo">118</span> String peerTableName = null;<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span> /**<a name="line.121"></a>
-<span class="sourceLineNo">122</span> * Map-only comparator for 2 tables<a name="line.122"></a>
-<span class="sourceLineNo">123</span> */<a name="line.123"></a>
-<span class="sourceLineNo">124</span> public static class Verifier<a name="line.124"></a>
-<span class="sourceLineNo">125</span> extends TableMapper<ImmutableBytesWritable, Put> {<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span> public enum Counters {<a name="line.127"></a>
-<span class="sourceLineNo">128</span> GOODROWS, BADROWS, ONLY_IN_SOURCE_TABLE_ROWS, ONLY_IN_PEER_TABLE_ROWS, CONTENT_DIFFERENT_ROWS<a name="line.128"></a>
-<span class="sourceLineNo">129</span> }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span> private Connection sourceConnection;<a name="line.131"></a>
-<span class="sourceLineNo">132</span> private Table sourceTable;<a name="line.132"></a>
-<span class="sourceLineNo">133</span> private Connection replicatedConnection;<a name="line.133"></a>
-<span class="sourceLineNo">134</span> private Table replicatedTable;<a name="line.134"></a>
-<span class="sourceLineNo">135</span> private ResultScanner replicatedScanner;<a name="line.135"></a>
-<span class="sourceLineNo">136</span> private Result currentCompareRowInPeerTable;<a name="line.136"></a>
-<span class="sourceLineNo">137</span> private int sleepMsBeforeReCompare;<a name="line.137"></a>
-<span class="sourceLineNo">138</span> private String delimiter = "";<a name="line.138"></a>
-<span class="sourceLineNo">139</span> private boolean verbose = false;<a name="line.139"></a>
-<span class="sourceLineNo">140</span> private int batch = -1;<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> * Map method that compares every scanned row with the equivalent from<a name="line.143"></a>
-<span class="sourceLineNo">144</span> * a distant cluster.<a name="line.144"></a>
-<span class="sourceLineNo">145</span> * @param row The current table row key.<a name="line.145"></a>
-<span class="sourceLineNo">146</span> * @param value The columns.<a name="line.146"></a>
-<span class="sourceLineNo">147</span> * @param context The current context.<a name="line.147"></a>
-<span class="sourceLineNo">148</span> * @throws IOException When something is broken with the data.<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 map(ImmutableBytesWritable row, final Result value,<a name="line.151"></a>
-<span class="sourceLineNo">152</span> Context context)<a name="line.152"></a>
-<span class="sourceLineNo">153</span> throws IOException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span> if (replicatedScanner == null) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span> Configuration conf = context.getConfiguration();<a name="line.155"></a>
-<span class="sourceLineNo">156</span> sleepMsBeforeReCompare = conf.getInt(NAME +".sleepMsBeforeReCompare", 0);<a name="line.156"></a>
-<span class="sourceLineNo">157</span> delimiter = conf.get(NAME + ".delimiter", "");<a name="line.157"></a>
-<span class="sourceLineNo">158</span> verbose = conf.getBoolean(NAME +".verbose", false);<a name="line.158"></a>
-<span class="sourceLineNo">159</span> batch = conf.getInt(NAME + ".batch", -1);<a name="line.159"></a>
-<span class="sourceLineNo">160</span> final Scan scan = new Scan();<a name="line.160"></a>
-<span class="sourceLineNo">161</span> if (batch > 0) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> scan.setBatch(batch);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span> scan.setCacheBlocks(false);<a name="line.164"></a>
-<span class="sourceLineNo">165</span> scan.setCaching(conf.getInt(TableInputFormat.SCAN_CACHEDROWS, 1));<a name="line.165"></a>
-<span class="sourceLineNo">166</span> long startTime = conf.getLong(NAME + ".startTime", 0);<a name="line.166"></a>
-<span class="sourceLineNo">167</span> long endTime = conf.getLong(NAME + ".endTime", Long.MAX_VALUE);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> String families = conf.get(NAME + ".families", null);<a name="line.168"></a>
-<span class="sourceLineNo">169</span> if(families != null) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span> String[] fams = families.split(",");<a name="line.170"></a>
-<span class="sourceLineNo">171</span> for(String fam : fams) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.172"></a>
-<span class="sourceLineNo">173</span> }<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span> boolean includeDeletedCells = conf.getBoolean(NAME + ".includeDeletedCells", false);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> scan.setRaw(includeDeletedCells);<a name="line.176"></a>
-<span class="sourceLineNo">177</span> String rowPrefixes = conf.get(NAME + ".rowPrefixes", null);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> scan.setTimeRange(startTime, endTime);<a name="line.179"></a>
-<span class="sourceLineNo">180</span> int versions = conf.getInt(NAME+".versions", -1);<a name="line.180"></a>
-<span class="sourceLineNo">181</span> LOG.info("Setting number of version inside map as: " + versions);<a name="line.181"></a>
-<span class="sourceLineNo">182</span> if (versions >= 0) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> scan.setMaxVersions(versions);<a name="line.183"></a>
-<span class="sourceLineNo">184</span> }<a name="line.184"></a>
-<span class="sourceLineNo">185</span> TableName tableName = TableName.valueOf(conf.get(NAME + ".tableName"));<a name="line.185"></a>
-<span class="sourceLineNo">186</span> sourceConnection = ConnectionFactory.createConnection(conf);<a name="line.186"></a>
-<span class="sourceLineNo">187</span> sourceTable = sourceConnection.getTable(tableName);<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span> final InputSplit tableSplit = context.getInputSplit();<a name="line.189"></a>
+<span class="sourceLineNo">121</span> private final static String JOB_NAME_CONF_KEY = "mapreduce.job.name";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span> /**<a name="line.123"></a>
+<span class="sourceLineNo">124</span> * Map-only comparator for 2 tables<a name="line.124"></a>
+<span class="sourceLineNo">125</span> */<a name="line.125"></a>
+<span class="sourceLineNo">126</span> public static class Verifier<a name="line.126"></a>
+<span class="sourceLineNo">127</span> extends TableMapper<ImmutableBytesWritable, Put> {<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span> public enum Counters {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> GOODROWS, BADROWS, ONLY_IN_SOURCE_TABLE_ROWS, ONLY_IN_PEER_TABLE_ROWS, CONTENT_DIFFERENT_ROWS<a name="line.130"></a>
+<span class="sourceLineNo">131</span> }<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span> private Connection sourceConnection;<a name="line.133"></a>
+<span class="sourceLineNo">134</span> private Table sourceTable;<a name="line.134"></a>
+<span class="sourceLineNo">135</span> private Connection replicatedConnection;<a name="line.135"></a>
+<span class="sourceLineNo">136</span> private Table replicatedTable;<a name="line.136"></a>
+<span class="sourceLineNo">137</span> private ResultScanner replicatedScanner;<a name="line.137"></a>
+<span class="sourceLineNo">138</span> private Result currentCompareRowInPeerTable;<a name="line.138"></a>
+<span class="sourceLineNo">139</span> private int sleepMsBeforeReCompare;<a name="line.139"></a>
+<span class="sourceLineNo">140</span> private String delimiter = "";<a name="line.140"></a>
+<span class="sourceLineNo">141</span> private boolean verbose = false;<a name="line.141"></a>
+<span class="sourceLineNo">142</span> private int batch = -1;<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span> /**<a name="line.144"></a>
+<span class="sourceLineNo">145</span> * Map method that compares every scanned row with the equivalent from<a name="line.145"></a>
+<span class="sourceLineNo">146</span> * a distant cluster.<a name="line.146"></a>
+<span class="sourceLineNo">147</span> * @param row The current table row key.<a name="line.147"></a>
+<span class="sourceLineNo">148</span> * @param value The columns.<a name="line.148"></a>
+<span class="sourceLineNo">149</span> * @param context The current context.<a name="line.149"></a>
+<span class="sourceLineNo">150</span> * @throws IOException When something is broken with the data.<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 map(ImmutableBytesWritable row, final Result value,<a name="line.153"></a>
+<span class="sourceLineNo">154</span> Context context)<a name="line.154"></a>
+<span class="sourceLineNo">155</span> throws IOException {<a name="line.155"></a>
+<span class="sourceLineNo">156</span> if (replicatedScanner == null) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span> Configuration conf = context.getConfiguration();<a name="line.157"></a>
+<span class="sourceLineNo">158</span> sleepMsBeforeReCompare = conf.getInt(NAME +".sleepMsBeforeReCompare", 0);<a name="line.158"></a>
+<span class="sourceLineNo">159</span> delimiter = conf.get(NAME + ".delimiter", "");<a name="line.159"></a>
+<span class="sourceLineNo">160</span> verbose = conf.getBoolean(NAME +".verbose", false);<a name="line.160"></a>
+<span class="sourceLineNo">161</span> batch = conf.getInt(NAME + ".batch", -1);<a name="line.161"></a>
+<span class="sourceLineNo">162</span> final Scan scan = new Scan();<a name="line.162"></a>
+<span class="sourceLineNo">163</span> if (batch > 0) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span> scan.setBatch(batch);<a name="line.164"></a>
+<span class="sourceLineNo">165</span> }<a name="line.165"></a>
+<span class="sourceLineNo">166</span> scan.setCacheBlocks(false);<a name="line.166"></a>
+<span class="sourceLineNo">167</span> scan.setCaching(conf.getInt(TableInputFormat.SCAN_CACHEDROWS, 1));<a name="line.167"></a>
+<span class="sourceLineNo">168</span> long startTime = conf.getLong(NAME + ".startTime", 0);<a name="line.168"></a>
+<span class="sourceLineNo">169</span> long endTime = conf.getLong(NAME + ".endTime", Long.MAX_VALUE);<a name="line.169"></a>
+<span class="sourceLineNo">170</span> String families = conf.get(NAME + ".families", null);<a name="line.170"></a>
+<span class="sourceLineNo">171</span> if(families != null) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span> String[] fams = families.split(",");<a name="line.172"></a>
+<span class="sourceLineNo">173</span> for(String fam : fams) {<a name="line.173"></a>
+<span class="sourceLineNo">174</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.174"></a>
+<span class="sourceLineNo">175</span> }<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span> boolean includeDeletedCells = conf.getBoolean(NAME + ".includeDeletedCells", false);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> scan.setRaw(includeDeletedCells);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> String rowPrefixes = conf.get(NAME + ".rowPrefixes", null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> scan.setTimeRange(startTime, endTime);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> int versions = conf.getInt(NAME+".versions", -1);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> LOG.info("Setting number of version inside map as: " + versions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span> if (versions >= 0) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span> scan.setMaxVersions(versions);<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span> TableName tableName = TableName.valueOf(conf.get(NAME + ".tableName"));<a name="line.187"></a>
+<span class="sourceLineNo">188</span> sourceConnection = ConnectionFactory.createConnection(conf);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> sourceTable = sourceConnection.getTable(tableName);<a name="line.189"></a>
<span class="sourceLineNo">190</span><a name="line.190"></a>
-<span class="sourceLineNo">191</span> String zkClusterKey = conf.get(NAME + ".peerQuorumAddress");<a name="line.191"></a>
-<span class="sourceLineNo">192</span> Configuration peerConf = HBaseConfiguration.createClusterConf(conf,<a name="line.192"></a>
-<span class="sourceLineNo">193</span> zkClusterKey, PEER_CONFIG_PREFIX);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> replicatedConnection = ConnectionFactory.createConnection(peerConf);<a name="line.195"></a>
-<span class="sourceLineNo">196</span> replicatedTable = replicatedConnection.getTable(tableName);<a name="line.196"></a>
-<span class="sourceLineNo">197</span> scan.setStartRow(value.getRow());<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span> byte[] endRow = null;<a name="line.199"></a>
-<span class="sourceLineNo">200</span> if (tableSplit instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span> endRow = ((TableSnapshotInputFormat.TableSnapshotRegionSplit) tableSplit).getRegionInfo()<a name="line.201"></a>
-<span class="sourceLineNo">202</span> .getEndKey();<a name="line.202"></a>
-<span class="sourceLineNo">203</span> } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span> endRow = ((TableSplit) tableSplit).getEndRow();<a name="line.204"></a>
-<span class="sourceLineNo">205</span> }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span> scan.setStopRow(endRow);<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> String peerSnapshotName = conf.get(NAME + ".peerSnapshotName", null);<a name="line.209"></a>
-<span class="sourceLineNo">210</span> if (peerSnapshotName != null) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span> String peerSnapshotTmpDir = conf.get(NAME + ".peerSnapshotTmpDir", null);<a name="line.211"></a>
-<span class="sourceLineNo">212</span> String peerFSAddress = conf.get(NAME + ".peerFSAddress", null);<a name="line.212"></a>
-<span class="sourceLineNo">213</span> String peerHBaseRootAddress = conf.get(NAME + ".peerHBaseRootAddress", null);<a name="line.213"></a>
-<span class="sourceLineNo">214</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> FSUtils.setRootDir(peerConf, new Path(peerHBaseRootAddress));<a name="line.215"></a>
-<span class="sourceLineNo">216</span> LOG.info("Using peer snapshot:" + peerSnapshotName + " with temp dir:"<a name="line.216"></a>
-<span class="sourceLineNo">217</span> + peerSnapshotTmpDir + " peer root uri:" + FSUtils.getRootDir(peerConf)<a name="line.217"></a>
-<span class="sourceLineNo">218</span> + " peerFSAddress:" + peerFSAddress);<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span> replicatedScanner = new TableSnapshotScanner(peerConf, FSUtils.getRootDir(peerConf),<a name="line.220"></a>
-<span class="sourceLineNo">221</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName, scan, true);<a name="line.221"></a>
-<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> replicatedScanner = replicatedTable.getScanner(scan);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> }<a name="line.224"></a>
-<span class="sourceLineNo">225</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.225"></a>
-<span class="sourceLineNo">226</span> }<a name="line.226"></a>
-<span class="sourceLineNo">227</span> while (true) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span> if (currentCompareRowInPeerTable == null) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span> // reach the region end of peer table, row only in source table<a name="line.229"></a>
-<span class="sourceLineNo">230</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.230"></a>
-<span class="sourceLineNo">231</span> break;<a name="line.231"></a>
-<span class="sourceLineNo">232</span> }<a name="line.232"></a>
-<span class="sourceLineNo">233</span> int rowCmpRet = Bytes.compareTo(value.getRow(), currentCompareRowInPeerTable.getRow());<a name="line.233"></a>
-<span class="sourceLineNo">234</span> if (rowCmpRet == 0) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span> // rowkey is same, need to compare the content of the row<a name="line.235"></a>
-<span class="sourceLineNo">236</span> try {<a name="line.236"></a>
-<span class="sourceLineNo">237</span> Result.compareResults(value, currentCompareRowInPeerTable);<a name="line.237"></a>
-<span class="sourceLineNo">238</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> if (verbose) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span> LOG.info("Good row key: " + delimiter<a name="line.240"></a>
-<span class="sourceLineNo">241</span> + Bytes.toStringBinary(value.getRow()) + delimiter);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> } catch (Exception e) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> logFailRowAndIncreaseCounter(context, Counters.CONTENT_DIFFERENT_ROWS, value);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.246"></a>
-<span class="sourceLineNo">247</span> break;<a name="line.247"></a>
-<span class="sourceLineNo">248</span> } else if (rowCmpRet < 0) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> // row only exists in source table<a name="line.249"></a>
-<span class="sourceLineNo">250</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.250"></a>
+<span class="sourceLineNo">191</span> final InputSplit tableSplit = context.getInputSplit();<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span> String zkClusterKey = conf.get(NAME + ".peerQuorumAddress");<a name="line.193"></a>
+<span class="sourceLineNo">194</span> Configuration peerConf = HBaseConfiguration.createClusterConf(conf,<a name="line.194"></a>
+<span class="sourceLineNo">195</span> zkClusterKey, PEER_CONFIG_PREFIX);<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span> String peerName = peerConf.get(NAME + ".peerTableName", tableName.getNameAsString());<a name="line.197"></a>
+<span class="sourceLineNo">198</span> TableName peerTableName = TableName.valueOf(peerName);<a name="line.198"></a>
+<span class="sourceLineNo">199</span> replicatedConnection = ConnectionFactory.createConnection(peerConf);<a name="line.199"></a>
+<span class="sourceLineNo">200</span> replicatedTable = replicatedConnection.getTable(peerTableName);<a name="line.200"></a>
+<span class="sourceLineNo">201</span> scan.setStartRow(value.getRow());<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span> byte[] endRow = null;<a name="line.203"></a>
+<span class="sourceLineNo">204</span> if (tableSplit instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit) {<a name="line.204"></a>
+<span class="sourceLineNo">205</span> endRow = ((TableSnapshotInputFormat.TableSnapshotRegionSplit) tableSplit).getRegionInfo()<a name="line.205"></a>
+<span class="sourceLineNo">206</span> .getEndKey();<a name="line.206"></a>
+<span class="sourceLineNo">207</span> } else {<a name="line.207"></a>
+<span class="sourceLineNo">208</span> endRow = ((TableSplit) tableSplit).getEndRow();<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> scan.setStopRow(endRow);<a name="line.211"></a>
+<span class="sourceLineNo">212</span><a name="line.212"></a>
+<span class="sourceLineNo">213</span> String peerSnapshotName = conf.get(NAME + ".peerSnapshotName", null);<a name="line.213"></a>
+<span class="sourceLineNo">214</span> if (peerSnapshotName != null) {<a name="line.214"></a>
+<span class="sourceLineNo">215</span> String peerSnapshotTmpDir = conf.get(NAME + ".peerSnapshotTmpDir", null);<a name="line.215"></a>
+<span class="sourceLineNo">216</span> String peerFSAddress = conf.get(NAME + ".peerFSAddress", null);<a name="line.216"></a>
+<span class="sourceLineNo">217</span> String peerHBaseRootAddress = conf.get(NAME + ".peerHBaseRootAddress", null);<a name="line.217"></a>
+<span class="sourceLineNo">218</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> FSUtils.setRootDir(peerConf, new Path(peerHBaseRootAddress));<a name="line.219"></a>
+<span class="sourceLineNo">220</span> LOG.info("Using peer snapshot:" + peerSnapshotName + " with temp dir:"<a name="line.220"></a>
+<span class="sourceLineNo">221</span> + peerSnapshotTmpDir + " peer root uri:" + FSUtils.getRootDir(peerConf)<a name="line.221"></a>
+<span class="sourceLineNo">222</span> + " peerFSAddress:" + peerFSAddress);<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span> replicatedScanner = new TableSnapshotScanner(peerConf, FSUtils.getRootDir(peerConf),<a name="line.224"></a>
+<span class="sourceLineNo">225</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName, scan, true);<a name="line.225"></a>
+<span class="sourceLineNo">226</span> } else {<a name="line.226"></a>
+<span class="sourceLineNo">227</span> replicatedScanner = replicatedTable.getScanner(scan);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> }<a name="line.228"></a>
+<span class="sourceLineNo">229</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.229"></a>
+<span class="sourceLineNo">230</span> }<a name="line.230"></a>
+<span class="sourceLineNo">231</span> while (true) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span> if (currentCompareRowInPeerTable == null) {<a name="line.232"></a>
+<span class="sourceLineNo">233</span> // reach the region end of peer table, row only in source table<a name="line.233"></a>
+<span class="sourceLineNo">234</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.234"></a>
+<span class="sourceLineNo">235</span> break;<a name="line.235"></a>
+<span class="sourceLineNo">236</span> }<a name="line.236"></a>
+<span class="sourceLineNo">237</span> int rowCmpRet = Bytes.compareTo(value.getRow(), currentCompareRowInPeerTable.getRow());<a name="line.237"></a>
+<span class="sourceLineNo">238</span> if (rowCmpRet == 0) {<a name="line.238"></a>
+<span class="sourceLineNo">239</span> // rowkey is same, need to compare the content of the row<a name="line.239"></a>
+<span class="sourceLineNo">240</span> try {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> Result.compareResults(value, currentCompareRowInPeerTable);<a name="line.241"></a>
+<span class="sourceLineNo">242</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.242"></a>
+<span class="sourceLineNo">243</span> if (verbose) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> LOG.info("Good row key: " + delimiter<a name="line.244"></a>
+<span class="sourceLineNo">245</span> + Bytes.toStringBinary(value.getRow()) + delimiter);<a name="line.245"></a>
+<span class="sourceLineNo">246</span> }<a name="line.246"></a>
+<span class="sourceLineNo">247</span> } catch (Exception e) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> logFailRowAndIncreaseCounter(context, Counters.CONTENT_DIFFERENT_ROWS, value);<a name="line.248"></a>
+<span class="sourceLineNo">249</span> }<a name="line.249"></a>
+<span class="sourceLineNo">250</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.250"></a>
<span class="sourceLineNo">251</span> break;<a name="line.251"></a>
-<span class="sourceLineNo">252</span> } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span> // row only exists in peer table<a name="line.253"></a>
-<span class="sourceLineNo">254</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.254"></a>
-<span class="sourceLineNo">255</span> currentCompareRowInPeerTable);<a name="line.255"></a>
-<span class="sourceLineNo">256</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.256"></a>
-<span class="sourceLineNo">257</span> }<a name="line.257"></a>
-<span class="sourceLineNo">258</span> }<a name="line.258"></a>
-<span class="sourceLineNo">259</span> }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span> private void logFailRowAndIncreaseCounter(Context context, Counters counter, Result row) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span> if (sleepMsBeforeReCompare > 0) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> Threads.sleep(sleepMsBeforeReCompare);<a name="line.263"></a>
-<span class="sourceLineNo">264</span> try {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> Result sourceResult = sourceTable.get(new Get(row.getRow()));<a name="line.265"></a>
-<span class="sourceLineNo">266</span> Result replicatedResult = replicatedTable.get(new Get(row.getRow()));<a name="line.266"></a>
-<span class="sourceLineNo">267</span> Result.compareResults(sourceResult, replicatedResult);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> if (!sourceResult.isEmpty()) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.269"></a>
-<span class="sourceLineNo">270</span> if (verbose) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span> LOG.info("Good row key (with recompare): " + delimiter + Bytes.toStringBinary(row.getRow())<a name="line.271"></a>
-<span class="sourceLineNo">272</span> + delimiter);<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> return;<a name="line.275"></a>
-<span class="sourceLineNo">276</span> } catch (Exception e) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span> LOG.error("recompare fail after sleep, rowkey=" + delimiter +<a name="line.277"></a>
-<span class="sourceLineNo">278</span> Bytes.toStringBinary(row.getRow()) + delimiter);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> }<a name="line.280"></a>
-<span class="sourceLineNo">281</span> context.getCounter(counter).increment(1);<a name="line.281"></a>
-<span class="sourceLineNo">282</span> context.getCounter(Counters.BADROWS).increment(1);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> LOG.error(counter.toString() + ", rowkey=" + delimiter + Bytes.toStringBinary(row.getRow()) +<a name="line.283"></a>
-<span class="sourceLineNo">284</span> delimiter);<a name="line.284"></a>
-<span class="sourceLineNo">285</span> }<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span> @Override<a name="line.287"></a>
-<span class="sourceLineNo">288</span> protected void cleanup(Context context) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span> if (replicatedScanner != null) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span> try {<a name="line.290"></a>
-<span class="sourceLineNo">291</span> while (currentCompareRowInPeerTable != null) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.292"></a>
-<span class="sourceLineNo">293</span> currentCompareRowInPeerTable);<a name="line.293"></a>
-<span class="sourceLineNo">294</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.294"></a>
-<span class="sourceLineNo">295</span> }<a name="line.295"></a>
-<span class="sourceLineNo">296</span> } catch (Exception e) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> LOG.error("fail to scan peer table in cleanup", e);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> } finally {<a name="line.298"></a>
-<span class="sourceLineNo">299</span> replicatedScanner.close();<a name="line.299"></a>
-<span class="sourceLineNo">300</span> replicatedScanner = null;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> }<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span> if (sourceTable != null) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span> try {<a name="line.305"></a>
-<span class="sourceLineNo">306</span> sourceTable.close();<a name="line.306"></a>
-<span class="sourceLineNo">307</span> } catch (IOException e) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> LOG.error("fail to close source table in cleanup", e);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> }<a name="line.310"></a>
-<span class="sourceLineNo">311</span> if(sourceConnection != null){<a name="line.311"></a>
-<span class="sourceLineNo">312</span> try {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> sourceConnection.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span> } catch (Exception e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> LOG.error("fail to close source connection in cleanup", e);<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> if(replicatedTable != null){<a name="line.319"></a>
-<span class="sourceLineNo">320</span> try{<a name="line.320"></a>
-<span class="sourceLineNo">321</span> replicatedTable.close();<a name="line.321"></a>
-<span class="sourceLineNo">322</span> } catch (Exception e) {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> LOG.error("fail to close replicated table in cleanup", e);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> }<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> if(replicatedConnection != null){<a name="line.326"></a>
-<span class="sourceLineNo">327</span> try {<a name="line.327"></a>
-<span class="sourceLineNo">328</span> replicatedConnection.close();<a name="line.328"></a>
-<span class="sourceLineNo">329</span> } catch (Exception e) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span> LOG.error("fail to close replicated connection in cleanup", e);<a name="line.330"></a>
-<span class="sourceLineNo">331</span> }<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> }<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span> private static Pair<ReplicationPeerConfig, Configuration> getPeerQuorumConfig(<a name="line.336"></a>
-<span class="sourceLineNo">337</span> final Configuration conf, String peerId) throws IOException {<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ZKWatcher localZKW = null;<a name="line.338"></a>
-<span class="sourceLineNo">339</span> try {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> localZKW = new ZKWatcher(conf, "VerifyReplication", new Abortable() {<a name="line.340"></a>
-<span class="sourceLineNo">341</span> @Override<a name="line.341"></a>
-<span class="sourceLineNo">342</span> public void abort(String why, Throwable e) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">252</span> } else if (rowCmpRet < 0) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span> // row only exists in source table<a name="line.253"></a>
+<span class="sourceLineNo">254</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_SOURCE_TABLE_ROWS, value);<a name="line.254"></a>
+<span class="sourceLineNo">255</span> break;<a name="line.255"></a>
+<span class="sourceLineNo">256</span> } else {<a name="line.256"></a>
+<span class="sourceLineNo">257</span> // row only exists in peer table<a name="line.257"></a>
+<span class="sourceLineNo">258</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.258"></a>
+<span class="sourceLineNo">259</span> currentCompareRowInPeerTable);<a name="line.259"></a>
+<span class="sourceLineNo">260</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.260"></a>
+<span class="sourceLineNo">261</span> }<a name="line.261"></a>
+<span class="sourceLineNo">262</span> }<a name="line.262"></a>
+<span class="sourceLineNo">263</span> }<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span> private void logFailRowAndIncreaseCounter(Context context, Counters counter, Result row) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span> if (sleepMsBeforeReCompare > 0) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span> Threads.sleep(sleepMsBeforeReCompare);<a name="line.267"></a>
+<span class="sourceLineNo">268</span> try {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> Result sourceResult = sourceTable.get(new Get(row.getRow()));<a name="line.269"></a>
+<span class="sourceLineNo">270</span> Result replicatedResult = replicatedTable.get(new Get(row.getRow()));<a name="line.270"></a>
+<span class="sourceLineNo">271</span> Result.compareResults(sourceResult, replicatedResult);<a name="line.271"></a>
+<span class="sourceLineNo">272</span> if (!sourceResult.isEmpty()) {<a name="line.272"></a>
+<span class="sourceLineNo">273</span> context.getCounter(Counters.GOODROWS).increment(1);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> if (verbose) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span> LOG.info("Good row key (with recompare): " + delimiter + Bytes.toStringBinary(row.getRow())<a name="line.275"></a>
+<span class="sourceLineNo">276</span> + delimiter);<a name="line.276"></a>
+<span class="sourceLineNo">277</span> }<a name="line.277"></a>
+<span class="sourceLineNo">278</span> }<a name="line.278"></a>
+<span class="sourceLineNo">279</span> return;<a name="line.279"></a>
+<span class="sourceLineNo">280</span> } catch (Exception e) {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> LOG.error("recompare fail after sleep, rowkey=" + delimiter +<a name="line.281"></a>
+<span class="sourceLineNo">282</span> Bytes.toStringBinary(row.getRow()) + delimiter);<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> context.getCounter(counter).increment(1);<a name="line.285"></a>
+<span class="sourceLineNo">286</span> context.getCounter(Counters.BADROWS).increment(1);<a name="line.286"></a>
+<span class="sourceLineNo">287</span> LOG.error(counter.toString() + ", rowkey=" + delimiter + Bytes.toStringBinary(row.getRow()) +<a name="line.287"></a>
+<span class="sourceLineNo">288</span> delimiter);<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span> @Override<a name="line.291"></a>
+<span class="sourceLineNo">292</span> protected void cleanup(Context context) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> if (replicatedScanner != null) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span> try {<a name="line.294"></a>
+<span class="sourceLineNo">295</span> while (currentCompareRowInPeerTable != null) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> logFailRowAndIncreaseCounter(context, Counters.ONLY_IN_PEER_TABLE_ROWS,<a name="line.296"></a>
+<span class="sourceLineNo">297</span> currentCompareRowInPeerTable);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> currentCompareRowInPeerTable = replicatedScanner.next();<a name="line.298"></a>
+<span class="sourceLineNo">299</span> }<a name="line.299"></a>
+<span class="sourceLineNo">300</span> } catch (Exception e) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> LOG.error("fail to scan peer table in cleanup", e);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> } finally {<a name="line.302"></a>
+<span class="sourceLineNo">303</span> replicatedScanner.close();<a name="line.303"></a>
+<span class="sourceLineNo">304</span> replicatedScanner = null;<a name="line.304"></a>
+<span class="sourceLineNo">305</span> }<a name="line.305"></a>
+<span class="sourceLineNo">306</span> }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span> if (sourceTable != null) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> try {<a name="line.309"></a>
+<span class="sourceLineNo">310</span> sourceTable.close();<a name="line.310"></a>
+<span class="sourceLineNo">311</span> } catch (IOException e) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span> LOG.error("fail to close source table in cleanup", e);<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> if(sourceConnection != null){<a name="line.315"></a>
+<span class="sourceLineNo">316</span> try {<a name="line.316"></a>
+<span class="sourceLineNo">317</span> sourceConnection.close();<a name="line.317"></a>
+<span class="sourceLineNo">318</span> } catch (Exception e) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span> LOG.error("fail to close source connection in cleanup", e);<a name="line.319"></a>
+<span class="sourceLineNo">320</span> }<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span><a name="line.322"></a>
+<span class="sourceLineNo">323</span> if(replicatedTable != null){<a name="line.323"></a>
+<span class="sourceLineNo">324</span> try{<a name="line.324"></a>
+<span class="sourceLineNo">325</span> replicatedTable.close();<a name="line.325"></a>
+<span class="sourceLineNo">326</span> } catch (Exception e) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> LOG.error("fail to close replicated table in cleanup", e);<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> if(replicatedConnection != null){<a name="line.330"></a>
+<span class="sourceLineNo">331</span> try {<a name="line.331"></a>
+<span class="sourceLineNo">332</span> replicatedConnection.close();<a name="line.332"></a>
+<span class="sourceLineNo">333</span> } catch (Exception e) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span> LOG.error("fail to close replicated connection in cleanup", e);<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> }<a name="line.337"></a>
+<span class="sourceLineNo">338</span> }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span> private static Pair<ReplicationPeerConfig, Configuration> getPeerQuorumConfig(<a name="line.340"></a>
+<span class="sourceLineNo">341</span> final Configuration conf, String peerId) throws IOException {<a name="line.341"></a>
+<span class="sourceLineNo">342</span> ZKWatcher localZKW = null;<a name="line.342"></a>
+<span class="sourceLineNo">343</span> try {<a name="line.343"></a>
+<span class="sourceLineNo">344</span> localZKW = new ZKWatcher(conf, "VerifyReplication", new Abortable() {<a name="line.344"></a>
<span class="sourceLineNo">345</span> @Override<a name="line.345"></a>
-<span class="sourceLineNo">346</span> public boolean isAborted() {<a name="line.346"></a>
-<span class="sourceLineNo">347</span> return false;<a name="line.347"></a>
-<span class="sourceLineNo">348</span> }<a name="line.348"></a>
-<span class="sourceLineNo">349</span> });<a name="line.349"></a>
-<span class="sourceLineNo">350</span> ReplicationPeerStorage storage =<a name="line.350"></a>
-<span class="sourceLineNo">351</span> ReplicationStorageFactory.getReplicationPeerStorage(localZKW, conf);<a name="line.351"></a>
-<span class="sourceLineNo">352</span> ReplicationPeerConfig peerConfig = storage.getPeerConfig(peerId);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> return Pair.newPair(peerConfig,<a name="line.353"></a>
-<span class="sourceLineNo">354</span> ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf));<a name="line.354"></a>
-<span class="sourceLineNo">355</span> } catch (ReplicationException e) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span> throw new IOException("An error occurred while trying to connect to the remote peer cluster",<a name="line.356"></a>
-<span class="sourceLineNo">357</span> e);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> } finally {<a name="line.358"></a>
-<span class="sourceLineNo">359</span> if (localZKW != null) {<a name="line.359"></a>
-<span class="sourceLineNo">360</span> localZKW.close();<a name="line.360"></a>
-<span class="sourceLineNo">361</span> }<a name="line.361"></a>
-<span class="sourceLineNo">362</span> }<a name="line.362"></a>
-<span class="sourceLineNo">363</span> }<a name="line.363"></a>
-<span class="sourceLineNo">364</span><a name="line.364"></a>
-<span class="sourceLineNo">365</span> private void restoreSnapshotForPeerCluster(Configuration conf, String peerQuorumAddress)<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throws IOException {<a name="line.366"></a>
-<span class="sourceLineNo">367</span> Configuration peerConf =<a name="line.367"></a>
-<span class="sourceLineNo">368</span> HBaseConfiguration.createClusterConf(conf, peerQuorumAddress, PEER_CONFIG_PREFIX);<a name="line.368"></a>
-<span class="sourceLineNo">369</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.369"></a>
-<span class="sourceLineNo">370</span> FSUtils.setRootDir(peerConf, new Path(peerFSAddress, peerHBaseRootAddress));<a name="line.370"></a>
-<span class="sourceLineNo">371</span> FileSystem fs = FileSystem.get(peerConf);<a name="line.371"></a>
-<span class="sourceLineNo">372</span> RestoreSnapshotHelper.copySnapshotForScanner(peerConf, fs, FSUtils.getRootDir(peerConf),<a name="line.372"></a>
-<span class="sourceLineNo">373</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName);<a name="line.373"></a>
-<span class="sourceLineNo">374</span> }<a name="line.374"></a>
-<span class="sourceLineNo">375</span><a name="line.375"></a>
-<span class="sourceLineNo">376</span> /**<a name="line.376"></a>
-<span class="sourceLineNo">377</span> * Sets up the actual job.<a name="line.377"></a>
-<span class="sourceLineNo">378</span> *<a name="line.378"></a>
-<span class="sourceLineNo">379</span> * @param conf The current configuration.<a name="line.379"></a>
-<span class="sourceLineNo">380</span> * @param args The command line parameters.<a name="line.380"></a>
-<span class="sourceLineNo">381</span> * @return The newly created job.<a name="line.381"></a>
-<span class="sourceLineNo">382</span> * @throws java.io.IOException When setting up the job fails.<a name="line.382"></a>
-<span class="sourceLineNo">383</span> */<a name="line.383"></a>
-<span class="sourceLineNo">384</span> public Job createSubmittableJob(Configuration conf, String[] args)<a name="line.384"></a>
-<span class="sourceLineNo">385</span> throws IOException {<a name="line.385"></a>
-<span class="sourceLineNo">386</span> if (!doCommandLine(args)) {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> return null;<a name="line.387"></a>
-<span class="sourceLineNo">388</span> }<a name="line.388"></a>
-<span class="sourceLineNo">389</span> conf.set(NAME+".tableName", tableName);<a name="line.389"></a>
-<span class="sourceLineNo">390</span> conf.setLong(NAME+".startTime", startTime);<a name="line.390"></a>
-<span class="sourceLineNo">391</span> conf.setLong(NAME+".endTime", endTime);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> conf.setInt(NAME +".sleepMsBeforeReCompare", sleepMsBeforeReCompare);<a name="line.392"></a>
-<span class="sourceLineNo">393</span> conf.set(NAME + ".delimiter", delimiter);<a name="line.393"></a>
-<span class="sourceLineNo">394</span> conf.setInt(NAME + ".batch", batch);<a name="line.394"></a>
-<span class="sourceLineNo">395</span> conf.setBoolean(NAME +".verbose", verbose);<a name="line.395"></a>
-<span class="sourceLineNo">396</span> conf.setBoolean(NAME +".includeDeletedCells", includeDeletedCells);<a name="line.396"></a>
-<span class="sourceLineNo">397</span> if (families != null) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span> conf.set(NAME+".families", families);<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span> if (rowPrefixes != null){<a name="line.400"></a>
-<span class="sourceLineNo">401</span> conf.set(NAME+".rowPrefixes", rowPrefixes);<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> String peerQuorumAddress;<a name="line.404"></a>
-<span class="sourceLineNo">405</span> Pair<ReplicationPeerConfig, Configuration> peerConfigPair = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span> if (peerId != null) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span> peerConfigPair = getPeerQuorumConfig(conf, peerId);<a name="line.407"></a>
-<span class="sourceLineNo">408</span> ReplicationPeerConfig peerConfig = peerConfigPair.getFirst();<a name="line.408"></a>
-<span class="sourceLineNo">409</span> peerQuorumAddress = peerConfig.getClusterKey();<a name="line.409"></a>
-<span class="sourceLineNo">410</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress + ", Peer Configuration: " +<a name="line.410"></a>
-<span class="sourceLineNo">411</span> peerConfig.getConfiguration());<a name="line.411"></a>
-<span class="sourceLineNo">412</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.412"></a>
-<span class="sourceLineNo">413</span> HBaseConfiguration.setWithPrefix(conf, PEER_CONFIG_PREFIX,<a name="line.413"></a>
-<span class="sourceLineNo">414</span> peerConfig.getConfiguration().entrySet());<a name="line.414"></a>
-<span class="sourceLineNo">415</span> } else {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> assert this.peerQuorumAddress != null;<a name="line.416"></a>
-<span class="sourceLineNo">417</span> peerQuorumAddress = this.peerQuorumAddress;<a name="line.417"></a>
-<span class="sourceLineNo">418</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress);<a name="line.418"></a>
-<span class="sourceLineNo">419</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.419"></a>
-<span class="sourceLineNo">420</span> }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span> conf.setInt(NAME + ".versions", versions);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> LOG.info("Number of version: " + versions);<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span> //Set Snapshot specific parameters<a name="line.425"></a>
-<span class="sourceLineNo">426</span> if (peerSnapshotName != null) {<a name="line.426"></a>
-<span class="sourceLineNo">427</span> conf.set(NAME + ".peerSnapshotName", peerSnapshotName);<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span> // for verifyRep by snapshot, choose a unique sub-directory under peerSnapshotTmpDir to<a name="line.429"></a>
-<span class="sourceLineNo">430</span> // restore snapshot.<a name="line.430"></a>
-<span class="sourceLineNo">431</span> Path restoreDir = new Path(peerSnapshotTmpDir, UUID.randomUUID().toString());<a name="line.431"></a>
-<span class="sourceLineNo">432</span> peerSnapshotTmpDir = restoreDir.toString();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> conf.set(NAME + ".peerSnapshotTmpDir", peerSnapshotTmpDir);<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span> conf.set(NAME + ".peerFSAddress", peerFSAddress);<a name="line.435"></a>
-<span class="sourceLineNo">436</span> conf.set(NAME + ".peerHBaseRootAddress", peerHBaseRootAddress);<a name="line.436"></a>
+<span class="sourceLineNo">346</span> public void abort(String why, Throwable e) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span> }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span> @Override<a name="line.349"></a>
+<span class="sourceLineNo">350</span> public boolean isAborted() {<a name="line.350"></a>
+<span class="sourceLineNo">351</span> return false;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> });<a name="line.353"></a>
+<span class="sourceLineNo">354</span> ReplicationPeerStorage storage =<a name="line.354"></a>
+<span class="sourceLineNo">355</span> ReplicationStorageFactory.getReplicationPeerStorage(localZKW, conf);<a name="line.355"></a>
+<span class="sourceLineNo">356</span> ReplicationPeerConfig peerConfig = storage.getPeerConfig(peerId);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> return Pair.newPair(peerConfig,<a name="line.357"></a>
+<span class="sourceLineNo">358</span> ReplicationUtils.getPeerClusterConfiguration(peerConfig, conf));<a name="line.358"></a>
+<span class="sourceLineNo">359</span> } catch (ReplicationException e) {<a name="line.359"></a>
+<span class="sourceLineNo">360</span> throw new IOException("An error occurred while trying to connect to the remote peer cluster",<a name="line.360"></a>
+<span class="sourceLineNo">361</span> e);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> } finally {<a name="line.362"></a>
+<span class="sourceLineNo">363</span> if (localZKW != null) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span> localZKW.close();<a name="line.364"></a>
+<span class="sourceLineNo">365</span> }<a name="line.365"></a>
+<span class="sourceLineNo">366</span> }<a name="line.366"></a>
+<span class="sourceLineNo">367</span> }<a name="line.367"></a>
+<span class="sourceLineNo">368</span><a name="line.368"></a>
+<span class="sourceLineNo">369</span> private void restoreSnapshotForPeerCluster(Configuration conf, String peerQuorumAddress)<a name="line.369"></a>
+<span class="sourceLineNo">370</span> throws IOException {<a name="line.370"></a>
+<span class="sourceLineNo">371</span> Configuration peerConf =<a name="line.371"></a>
+<span class="sourceLineNo">372</span> HBaseConfiguration.createClusterConf(conf, peerQuorumAddress, PEER_CONFIG_PREFIX);<a name="line.372"></a>
+<span class="sourceLineNo">373</span> FileSystem.setDefaultUri(peerConf, peerFSAddress);<a name="line.373"></a>
+<span class="sourceLineNo">374</span> FSUtils.setRootDir(peerConf, new Path(peerFSAddress, peerHBaseRootAddress));<a name="line.374"></a>
+<span class="sourceLineNo">375</span> FileSystem fs = FileSystem.get(peerConf);<a name="line.375"></a>
+<span class="sourceLineNo">376</span> RestoreSnapshotHelper.copySnapshotForScanner(peerConf, fs, FSUtils.getRootDir(peerConf),<a name="line.376"></a>
+<span class="sourceLineNo">377</span> new Path(peerFSAddress, peerSnapshotTmpDir), peerSnapshotName);<a name="line.377"></a>
+<span class="sourceLineNo">378</span> }<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> * Sets up the actual job.<a name="line.381"></a>
+<span class="sourceLineNo">382</span> *<a name="line.382"></a>
+<span class="sourceLineNo">383</span> * @param conf The current configuration.<a name="line.383"></a>
+<span class="sourceLineNo">384</span> * @param args The command line parameters.<a name="line.384"></a>
+<span class="sourceLineNo">385</span> * @return The newly created job.<a name="line.385"></a>
+<span class="sourceLineNo">386</span> * @throws java.io.IOException When setting up the job fails.<a name="line.386"></a>
+<span class="sourceLineNo">387</span> */<a name="line.387"></a>
+<span class="sourceLineNo">388</span> public Job createSubmittableJob(Configuration conf, String[] args)<a name="line.388"></a>
+<span class="sourceLineNo">389</span> throws IOException {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> if (!doCommandLine(args)) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> return null;<a name="line.391"></a>
+<span class="sourceLineNo">392</span> }<a name="line.392"></a>
+<span class="sourceLineNo">393</span> conf.set(NAME+".tableName", tableName);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> conf.setLong(NAME+".startTime", startTime);<a name="line.394"></a>
+<span class="sourceLineNo">395</span> conf.setLong(NAME+".endTime", endTime);<a name="line.395"></a>
+<span class="sourceLineNo">396</span> conf.setInt(NAME +".sleepMsBeforeReCompare", sleepMsBeforeReCompare);<a name="line.396"></a>
+<span class="sourceLineNo">397</span> conf.set(NAME + ".delimiter", delimiter);<a name="line.397"></a>
+<span class="sourceLineNo">398</span> conf.setInt(NAME + ".batch", batch);<a name="line.398"></a>
+<span class="sourceLineNo">399</span> conf.setBoolean(NAME +".verbose", verbose);<a name="line.399"></a>
+<span class="sourceLineNo">400</span> conf.setBoolean(NAME +".includeDeletedCells", includeDeletedCells);<a name="line.400"></a>
+<span class="sourceLineNo">401</span> if (families != null) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span> conf.set(NAME+".families", families);<a name="line.402"></a>
+<span class="sourceLineNo">403</span> }<a name="line.403"></a>
+<span class="sourceLineNo">404</span> if (rowPrefixes != null){<a name="line.404"></a>
+<span class="sourceLineNo">405</span> conf.set(NAME+".rowPrefixes", rowPrefixes);<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> String peerQuorumAddress;<a name="line.408"></a>
+<span class="sourceLineNo">409</span> Pair<ReplicationPeerConfig, Configuration> peerConfigPair = null;<a name="line.409"></a>
+<span class="sourceLineNo">410</span> if (peerId != null) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> peerConfigPair = getPeerQuorumConfig(conf, peerId);<a name="line.411"></a>
+<span class="sourceLineNo">412</span> ReplicationPeerConfig peerConfig = peerConfigPair.getFirst();<a name="line.412"></a>
+<span class="sourceLineNo">413</span> peerQuorumAddress = peerConfig.getClusterKey();<a name="line.413"></a>
+<span class="sourceLineNo">414</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress + ", Peer Configuration: " +<a name="line.414"></a>
+<span class="sourceLineNo">415</span> peerConfig.getConfiguration());<a name="line.415"></a>
+<span class="sourceLineNo">416</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.416"></a>
+<span class="sourceLineNo">417</span> HBaseConfiguration.setWithPrefix(conf, PEER_CONFIG_PREFIX,<a name="line.417"></a>
+<span class="sourceLineNo">418</span> peerConfig.getConfiguration().entrySet());<a name="line.418"></a>
+<span class="sourceLineNo">419</span> } else {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> assert this.peerQuorumAddress != null;<a name="line.420"></a>
+<span class="sourceLineNo">421</span> peerQuorumAddress = this.peerQuorumAddress;<a name="line.421"></a>
+<span class="sourceLineNo">422</span> LOG.info("Peer Quorum Address: " + peerQuorumAddress);<a name="line.422"></a>
+<span class="sourceLineNo">423</span> conf.set(NAME + ".peerQuorumAddress", peerQuorumAddress);<a name="line.423"></a>
+<span class="sourceLineNo">424</span> }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> if (peerTableName != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span> LOG.info("Peer Table Name: " + peerTableName);<a name="line.427"></a>
+<span class="sourceLineNo">428</span> conf.set(NAME + ".peerTableName", peerTableName);<a name="line.428"></a>
+<span class="sourceLineNo">429</span> }<a name="line.429"></a>
+<span class="sourceLineNo">430</span><a name="line.430"></a>
+<span class="sourceLineNo">431</span> conf.setInt(NAME + ".versions", versions);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> LOG.info("Number of version: " + versions);<a name="line.432"></a>
+<span class="sourceLineNo">433</span><a name="line.433"></a>
+<span class="sourceLineNo">434</span> //Set Snapshot specific parameters<a name="line.434"></a>
+<span class="sourceLineNo">435</span> if (peerSnapshotName != null) {<a name="line.435"></a>
+<span class="sourceLineNo">436</span> conf.set(NAME + ".peerSnapshotName", peerSnapshotName);<a name="line.436"></a>
<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span> // This is to create HDFS delegation token for peer cluster in case of secured<a name="line.438"></a>
-<span class="sourceLineNo">439</span> conf.setStrings(MRJobConfig.JOB_NAMENODES, peerFSAddress, conf.get(HConstants.HBASE_DIR));<a name="line.439"></a>
-<span class="sourceLineNo">440</span> }<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span> Job job = Job.getInstance(conf, conf.get(JOB_NAME_CONF_KEY, NAME + "_" + tableName));<a name="line.442"></a>
-<span class="sourceLineNo">443</span> job.setJarByClass(VerifyReplication.class);<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span> Scan scan = new Scan();<a name="line.445"></a>
-<span class="sourceLineNo">446</span> scan.setTimeRange(startTime, endTime);<a name="line.446"></a>
-<span class="sourceLineNo">447</span> scan.setRaw(includeDeletedCells);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> scan.setCacheBlocks(false);<a name="line.448"></a>
-<span class="sourceLineNo">449</span> if (batch > 0) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> scan.setBatch(batch);<a name="line.450"></a>
-<span class="sourceLineNo">451</span> }<a name="line.451"></a>
-<span class="sourceLineNo">452</span> if (versions >= 0) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> scan.setMaxVersions(versions);<a name="line.453"></a>
-<span class="sourceLineNo">454</span> LOG.info("Number of versions set to " + versions);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span> if(families != null) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span> String[] fams = families.split(",");<a name="line.457"></a>
-<span class="sourceLineNo">458</span> for(String fam : fams) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span> scan.addFamily(Bytes.toBytes(fam));<a name="line.459"></a>
-<span class="sourceLineNo">460</span> }<a name="line.460"></a>
-<span class="sourceLineNo">461</span> }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> setRowPrefixFilter(scan, rowPrefixes);<a name="line.463"></a>
-<span class="sourceLineNo">464</span><a name="line.464"></a>
-<span class="sourceLineNo">465</span> if (sourceSnapshotName != null) {<a name="line.465"></a>
-<span class="sourceLineNo">466</span> Path snapshotTempPath = new Path(sourceSnapshotTmpDir);<a name="line.466"></a>
-<span class="sourceLineNo">467</span> LOG.info(<a name="line.467"></a>
-<span class="sourceLineNo">468</span> "Using source snapshot-" + sourceSnapshotName + " with temp dir:" + sourceSnapshotTmpDir);<a name="line.468"></a>
-<span class="sourceLineNo">469</span> TableMapReduceUtil.initTableSnapshotMapperJob(sourceSnapshotName, scan, Verifier.class, null,<a name="line.469"></a>
-<span class="sourceLineNo">470</span> null, job, true, snapshotTempPath);<a name="line.470"></a>
-<span class="sourceLineNo">471</span> restoreSnapshotForPeerCluster(conf, peerQuorumAddress);<a name="line.471"></a>
-<span class="sourceLineNo">472</span> } else {<a name="line.472"></a>
-<span class="sourceLineNo">473</span> TableMapReduceUtil.initTableMapperJob(tableName, scan, Verifier.class, null, null, job);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span> if (peerId != null) {<a name="line.476"></a>
-<span class="sourceLineNo">477</span> assert peerConfigPair != null;<a name="line.477"></a>
-<span class="sourceLineNo">478</span> Configuration peerClusterConf = peerConfigPair.getSecond();<a name="line.478"></a>
-<span class="sourceLineNo">479</span> // Obtain the auth token from peer cluster<a name="line.479"></a>
-<span class="sourceLineNo">480</span> TableMapReduceUtil.initCredentialsForCluster(job, peerClusterConf);<a name="line.480"></a>
-<span class="sourceLineNo">481</span> }<a name="line.481"></a>
-<span class="sourceLineNo">482</span><a name="line.482"></a>
-<span class="sourceLineNo">483</span> job.setOutputFormatClass(NullOutputFormat.class);<a name="line.483"></a>
-<span class="sourceLineNo">484</span> job.setNumReduceTasks(0);<a name="line.484"></a>
-<span class="sourceLineNo">485</span> return job;<a name="line.485"></a>
-<span class="sourceLineNo">486</span> }<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span> private static void setRowPrefixFilter(Scan scan, String rowPrefixes) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> if (rowPrefixes != null && !rowPrefixes.isEmpty()) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> String[] rowPrefixArray = rowPrefixes.split(",");<a name="line.490"></a>
-<span class="sourceLineNo">491</span> Arrays.sort(rowPrefixArray);<a name="line.491"></a>
-<span class="sourceLineNo">492</span> FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);<a name="line.492"></a>
-<span class="sourceLineNo">493</span> for (String prefix : rowPrefixArray) {<a name="line.493"></a>
-<span class="sourceLineNo">494</span> Filter filter = new PrefixFilter(Bytes.toBytes(prefix));<a name="line.494"></a>
-<span class="sourceLineNo">495</span> filterList.addFilter(filter);<a name="line.495"></a>
-<span class="sourceLineNo">496</span> }<a name="line.496"></a>
-<span class="sourceLineNo">497</span> scan.setFilter(filterList);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> byte[] startPrefixRow = Bytes.toBytes(rowPrefixArray[0]);<a name="line.498"></a>
-<span class="sourceLineNo">499</span> byte[] lastPrefixRow = Bytes.toBytes(rowPrefixArray[rowPrefixArray.length -1]);<a name="line.499"></a>
-<span class="sourceLineNo">500</span> setStartAndStopRows(scan, startPrefixRow, lastPrefixRow);<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> private static void setStartAndStopRows(Scan scan, byte[] startPrefixRow, byte[] lastPrefixRow) {<a name="line.504"></a>
-<span class="sourceLineNo">505</span> scan.setStartRow(startPrefixRow);<a name="line.505"></a>
-<span class="sourceLineNo">506</span> byte[] stopRow = Bytes.add(Bytes.head(lastPrefixRow, lastPrefixRow.length - 1),<a name="line.506"></a>
-<span class="sourceLineNo">507</span> new byte[]{(byte) (lastPrefixRow[lastPrefixRow.length - 1] + 1)});<a name="line.507"></a>
-<span class="sourceLineNo">508</span> scan.setStopRow(stopRow);<a name="line.508"></a>
-<span class="sourceLineNo">509</span> }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span> @VisibleForTesting<a name="line.511"></a>
-<span class="sourceLineNo">512</span> public boolean doCommandLine(final String[] args) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span> if (args.length < 2) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span> printUsage(null);<a name="line.514"></a>
-<span class="sourceLineNo">515</span> return false;<a name="line.515"></a>
-<span class="sourceLineNo">516</span> }<a name="line.516"></a>
-<span class="sourceLineNo">517</span> try {<a name="line.517"></a>
-<span class="sourceLineNo">518</span> for (int i = 0; i < args.length; i++) {<a name="line.518"></a>
-<span class="sourceLineNo">519</span> String cmd = args[i];<a name="line.519"></a>
-<span class="sourceLineNo">520</span> if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span> printUsage(null);<a name="line.521"></a>
-<span class="sourceLineNo">522</span> return false;<a name="line.522"></a>
-<span class="sourceLineNo">523</span> }<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span> final String startTimeArgKey = "--starttime=";<a name="line.525"></a>
-<span class="sourceLineNo">526</span> if (cmd.startsWith(startTimeArgKey)) {<a name="line.526"></a>
-<span class="sourceLineNo">527</span> startTime = Long.parseLong(cmd.substring(startTimeArgKey.length()));<a name="line.527"></a>
-<span class="sourceLineNo">528</span> continue;<a name="line.528"></a>
-<span class="sourceLineNo">529</span> }<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span> final String endTimeArgKey = "--endtime=";<a name="line.531"></a>
-<span class="sourceLineNo">532</span> if (cmd.startsWith(endTimeArgKey)) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span> endTime = Long.parseLong(cmd.substring(endTimeArgKey.length()));<a name="line.533"></a>
-<span class="sourceLineNo">534</span> continue;<a name="line.534"></a>
-<span class="sourceLineNo">535</span> }<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span> final String includeDeletedCellsArgKey = "--raw";<a name="line.537"></a>
-<span class="sourceLineNo">538</span> if (cmd.equals(includeDeletedCellsArgKey)) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span> includeDeletedCells = true;<a name="line.539"></a>
-<span class="sourceLineNo">540</span> continue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span> }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span> final String versionsArgKey = "--versions=";<a name="line.543"></a>
-<span class="sourceLineNo">544</span> if (cmd.startsWith(versionsArgKey)) {<a name="line.544"></a>
-<span class="sourceLineNo">545</span> versions = Integer.parseInt(cmd.substring(versionsArgKey.length()));<a name="line.545"></a>
-<span class="sourceLineNo">546</span> continue;<a name="line.546"></a>
-<span class="sourceLineNo">547</span> }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span> final String batchArgKey = "--batch=";<a name="line.549"></a>
-<span class="sourceLineNo">550</span> if (cmd.startsWith(batchArgKey)) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span> batch = Integer.parseInt(cmd.substring(batchArgKey.length()));<a name="line.551"></a>
-<span class="sourceLineNo">552</span> continue;<a name="line.552"></a>
-<span class="sourceLineNo">553</span> }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> final String familiesArgKey = "--families=";<a name="line.555"></a>
-<span class="sourceLineNo">556</span> if (cmd.startsWith(familiesArgKey)) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span> families = cmd.substring(familiesArgKey.length());<a name="line.557"></a>
-<span class="sourceLineNo">558</span> continue;<a name="line.558"></a>
-<span class="sourceLineNo">559</span> }<a name="line.559"></a>
-<span class="sourceLineNo">560</span><a name="line.560"></a>
-<span class="sourceLineNo">561</span> final String rowPrefixesKey = "--row-prefixes=";<a name="line.561"></a>
-<span class="sourceLineNo">562</span> if (cmd.startsWith(rowPrefixesKey)){<a name="line.562"></a>
-<span class="sourceLineNo">563</span> rowPrefixes = cmd.substring(rowPrefixesKey.length());<a name="line.563"></a>
-<span class="sourceLineNo">564</span> continue;<a name="line.564"></a>
-<span class="sourceLineNo">565</span> }<a name="line.565"></a>
-<span class="sourceLineNo">566</span><a name="line.566"></a>
-<span class="sourceLineNo">567</span> final String delimiterArgKey = "--delimiter=";<a name="line.567"></a>
-<span class="sourceLineNo">568</span> if (cmd.startsWith(delimiterArgKey)) {<a name="line.568"></a>
-<span class="sourceLineNo">569</span> delimiter = cmd.substring(delimiterArgKey.length());<a name="line.569"></a>
-<span class="sourceLineNo">570</span> continue;<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> final String sleepToReCompareKey = "--recomparesleep=";<a name="line.573"></a>
-<span class="sourceLineNo">574</span> if (cmd.startsWith(sleepToReCompareKey)) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span> sleepMsBeforeReCompare = Integer.parseInt(cmd.substring(sleepToReCompareKey.length()));<a name="line.575"></a>
-<span class="sourceLineNo">576</span> continue;<a name="line.576"></a>
-<span class="sourceLineNo">577</span> }<a name="line.577"></a>
-<span class="sourceLineNo">578</span> final String verboseKey = "--verbose";<a name="line.578"></a>
-<span class="sourceLineNo">579</span> if (cmd.startsWith(verboseKey)) {<a name="line.579"></a>
-<span class="sourceLineNo">580</span> verbose = true;<a name="line.580"></a>
-<span class="sourceLineNo">581</span> continue;<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> final String sourceSnapshotNameArgKey = "--sourceSnapshotName=";<a name="line.584"></a>
-<span class="sourceLineNo">585</span> if (cmd.startsWith(sourceSnapshotNameArgKey)) {<a name="line.585"></a>
-<span class="sourceLineNo">586</span> sourceSnapshotName = cmd.substring(sourceSnapshotNameArgKey.length());<a name="line.586"></a>
-<span class="sourceLineNo">587</span> continue;<a name="line.587"></a>
-<span class="sourceLineNo">588</span> }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span> final String sourceSnapshotTmpDirArgKey = "--sourceSnapshotTmpDir=";<a name="line.590"></a>
-<span class="sourceLineNo">591</span> if (cmd.startsWith(sourceSnapshotTmpDirArgKey)) {<a name="line.591"></a>
-<span class="sourceLineNo">592</span> sourceSnapshotTmpDir = cmd.substring(sourceSnapshotTmpDirArgKey.length());<a name="line.592"></a>
-<span class="sourceLineNo">593</span> continue;<a name="line.593"></a>
-<span class="sourceLineNo">594</span> }<a name="line.594"></a>
-<span class="sourceLineNo">595</span><a name="line.595"></a>
-<span class="sourceLineNo">596</span> final String peerSnapshotNameArgKey = "--peerSnapshotName=";<a name="line.596"></a>
-<span class="sourceLineNo">597</span> if (cmd.startsWith(peerSnapshotNameArgKey)) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span> peerSnapshotName = cmd.substring(peerSnapshotNameArgKey.length());<a name="line.598"></a>
-<span class="sourceLineNo">599</span> continue;<a name="line.599"></a>
-<span class="sourceLineNo">600</span> }<a name="line.600"></a>
-<span class="sourceLineNo">601</span><a name="line.601"></a>
-<span class="sourceLineNo">602</span> final String peerSnapshotTmpDirArgKey = "--peerSnapshotTmpDir=";<a name="line.602"></a>
-<span class="sourceLineNo">603</span> if (cmd.startsWith(peerSnapshotTmpDirArgKey)) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span> peerSnapshotTmpDir = cmd.substring(peerSnapshotTmpDirArgKey.length());<a name="line.604"></a>
-<span class="sourceLineNo">605</span> continue;<a name="line.605"></a>
-<span class="sourceLineNo">606</span> }<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span> final String peerFSAddressArgKey = "--peerFSAddress=";<a name="line.608"></a>
-<span class="sourceLineNo">609</span> if (cmd.startsWith(peerFSAddressArgKey)) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span> peerFSAddress = cmd.substring(peerFSAddressArgKey.length());<a name="line.610"></a>
-<span class="sourceLineNo">611</span> continue;<a name="line.611"></a>
-<span class="sourceLineNo">612</span> }<a name="line.612"></a>
-<span class="sourceLineNo">613</span><a name="line.613"></a>
-<span class="sourceLineNo">614</span> final String peerHBaseRootAddressArgKey = "--peerHBaseRootAddress=";<a name="line.614"></a>
-<span class="sourceLineNo">615</span> if (cmd.startsWith(peerHBaseRootAddressArgKey)) {<a name="line.615"></a>
-<span class="sourceLineNo">616</span> peerHBaseRootAddress = cmd.substring(peerHBaseRootAddressArgKey.length());<a name="line.616"></a>
-<span class="sourceLineNo">617</span> continue;<a name="line.617"></a>
-<span class="sourceLineNo">618</span> }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span> if (cmd.startsWith("--")) {<a name="line.620"></a>
-<span class="sourceLineNo">621</span> printUsage("Invalid argument '" + cmd + "'");<a name="line.621"></a>
-<span class="sourceLineNo">622</span> return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span> }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span> if (i == args.length-2) {<a name="line.625"></a>
-<span class="sourceLineNo">626</span> if (isPeerQuorumAddress(cmd)) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span> peerQuorumAddress = cmd;<a name="line.627"></a>
-<span class="sourceLineNo">628</span> } else {<a name="line.628"></a>
-<span class="sourceLineNo">629</span> peerId = cmd;<a name="line.629"></a>
-<span class="sourceLineNo">630</span> }<a name="line.630"></a>
-<span class="sourceLineNo">631</span> }<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span> if (i == args.length-1) {<a name="line.633"></a>
-<span class="sourceLineNo">634</span> tableName = cmd;<a name="line.634"></a>
-<span class="sourceLineNo">635</span> }<a name="line.635"></a>
-<span class="sourceLineNo">636</span> }<a name="line.636"></a>
-<span class="sourceLineNo">637</span><a name="line.637"></a>
-<span class="sourceLineNo">638</span> if ((sourceSnapshotName != null && sourceSnapshotTmpDir == null)<a name="line.638"></a>
-<span class="sourceLineNo">639</span> || (sourceSnapshotName == null && sourceSnapshotTmpDir != null)) {<a name="line.639"></a>
-<span class="sourceLineNo">640</span> printUsage("Source snapshot name and snapshot temp location should be provided"<a name="line.640"></a>
-<span class="sourceLineNo">641</span> + " to use snapshots in source cluster");<a name="line.641"></a>
-<span class="sourceLineNo">642</span> return false;<a name="line.642"></a>
-<span class="sourceLineNo">643</span> }<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span> if (peerSnapshotName != null || peerSnapshotTmpDir != null || peerFSAddress != null<a name="line.645"></a>
-<span class="sourceLineNo">646</span> || peerHBaseRootAddress != null) {<a name="line.646"></a>
-<span class="sourceLineNo">647</span> if (peerSnapshotName == null || peerSnapshotTmpDir == null || peerFSAddress == null<a name="line.647"></a>
-<span class="sourceLineNo">648</span> || peerHBaseRootAddress == null) {<a name="line.648"></a>
-<span class="sourceLineNo">649</span> printUsage(<a name="line.649"></a>
-<span class="sourceLineNo">650</span> "Peer snapshot name, peer snapshot temp location, Peer HBase root address and "<a name="line.650"></a>
-<span class="sourceLineNo">651</span> + "peer FSAddress should be provided to use snapshots in peer cluster");<a name="line.651"></a>
-<span class="sourceLineNo">652</span> return false;<a name="line.652"></a>
-<span class="sourceLineNo">653</span> }<a name="line.653"></a>
-<span class="sourceLineNo">654</span> }<a name="line.654"></a>
-<span class="sourceLineNo">655</span><a name="line.655"></a>
-<span class="sourceLineNo">656</span> // This is to avoid making recompare calls to source/peer tables when snapshots are used<a name="line.656"></a>
-<span class="sourceLineNo">657</span> if ((sourceSnapshotName != null || peerSnapshotName != null) && sleepMsBeforeReCompare > 0) {<a name="line.657"></a>
-<span class="sourceLineNo">658</span> printUsage(<a name="line.658"></a>
-<span class="sourceLineNo">659</span> "Using sleepMsBeforeReCompare along with snapshots is not allowed as snapshots are immutable");<a name="line.659"></a>
-<span class="sourceLineNo">660</span> return false;<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> } catch (Exception e) {<a name="line.663"></a>
-<span class="sourceLineNo">664</span> LOG.error("Failed to parse commandLine arguments", e);<a name="line.664"></a>
-<span class="sourceLineNo">665</span> printUsage("Can't start because " + e.getMessage());<a name="line.665"></a>
-<span class="sourceLineNo">666</span> return false;<a name="line.666"></a>
-<span class="sourceLineNo">667</span> }<a name="line.667"></a>
-<span class="sourceLineNo">668</span> return true;<a name="line.668"></a>
-<span class="sourceLineNo">669</span> }<a name="line.669"></a>
+<span class="sourceLineNo">438</span> // for verifyRep by snapshot, choose a unique sub-directory under peerSnapshotTmpDir to<a name="line.438"></a>
+<span class="sourceLineNo">439</span> // restore snapshot.<a name="line.439"></a>
+<span class="sourceLineNo">440</span> Path restoreDir = new Path(peerSnapshotTmpDir, UUID.randomUUID().toString());<a name="line.440"></a>
+<span class="sourceLineNo">441</span> peerSnapshotTmpDir = restoreDir.toString();<a name="line.441"></a>
+<span class="sourceLineNo">442</span> conf.set(NAME + ".peerSnapshotTmpDir", peerSnapshotTmpDir);<a name="line.442"></a>
+<span class="sourceLineNo">443</span><a name="line.443"></a>
+<span class="sourceLineNo">444</span> conf.set(NAME + ".peerFSAddress", peerFSAddress);<a name="line.444"></a>
+<span class="sourceLineNo">445</span> conf.set(NAME + ".peerHBaseRootAddress", peerHBaseRootAddress);<a name="line.445"></a>
+<span class="sourceLineNo">446</span><a name="line.446"></a>
+<span class="sourceLineNo">447</span> // This is to create HDFS delegation token for peer cluster in case of secured<a name="line.447"></a>
+<span class="sourceLineNo">448</span> conf.setStrings(MRJobConfig.JOB_NAMENODES, peerFSAddress, conf.get(HConstants.HBASE_DIR));<a name="line.448"></a>
+<span class="sourceLineNo">449</span> }<a name="line.449"></a>
+<span class="sourceLineNo">450</span><a name="line.450"></a>
+<span class="sourceLineNo">451</span> Job job = Job.getInstance(conf, conf.get(JOB_NAME_CONF_KEY, NAME + "_" + tableName));<a name="line.451"></a>
+<span class="sourceLineNo">452</span> job.setJarByClass(VerifyReplication.class);<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span> Scan scan = new Scan();<a name="line.454"></a>
+<span class="sourceLineNo">455</span> scan.setTimeRange(startTime, endTime);<a name="line.455"></a>
+<span class="sourceLineNo">456</span> scan.setRaw(includeDeletedCells);<a name="line.456"></a>
+<span class="sourceLineNo">457</span> scan.setCacheBlocks(false);<a name="line.457"></a>
+<span class="sourceLineNo">458</span> if (batch > 0) {<a name="line.458"></a>
+<span class="sourceLineNo">459</span> scan.setBatch(batch);<a name="line.459"></a>
+<span class="sourceLineNo">460</span> }<a name="line.460"></a>
+<span class="sourceLineNo">461</span> if (versions >= 0) {<a name="line.461"></a>
+<span class="sourceLineNo">462</span> scan.setMaxVersions(versions);<a name="line.462"></a>
+<span class="sourceLineNo">463</span> LOG.info("Number of versions set to " + versions);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> }<a name="line.464"></a>
+<span class="sourceLineNo">465</span> if(families != null) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span> String[] fams = families.split(",");<a name="line.466"></a>
+<span class="sourceLineNo">467</span> for(String fam : fams) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span> scan.addFamily(Bytes.toBytes(fam));<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> setRowPrefixFilter(scan, rowPrefixes);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span> if (sourceSnapshotName != null) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span> Path snapshotTempPath = new Path(sourceSnapshotTmpDir);<a name="line.475"></a>
+<span class="sourceLineNo">476</span> LOG.info(<a name="line.476"></a>
+<span class="sourceLineNo">477</span> "Using source snapshot-" + sourceSnapshotName + " with temp dir:" + sourceSnapshotTmpDir);<a name="line.477"></a>
+<span class="sourceLineNo">478</span> TableMapReduceUtil.initTableSnapshotMapperJob(sourceSnapshotName, scan, Verifier.class, null,<a name="line.478"></a>
+<span class="sourceLineNo">479</span> null, job, true, snapshotTempPath);<a name="line.479"></a>
+<span class="sourceLineNo">480</span> restoreSnapshotForPeerCluster(conf, peerQuorumAddress);<a name="line.480"></a>
+<span class="sourceLineNo">481</span> } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span> TableMapReduceUtil.initTableMapperJob(tableName, scan, Verifier.class, null, null, job);<a name="line.482"></a>
+<span class="sourceLineNo">483</span> }<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span> if (peerId != null) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span> assert peerConfigPair != null;<a name="line.486"></a>
+<span class="sourceLineNo">487</span> Configuration peerClusterConf = peerConfigPair.getSecond();<a name="line.487"></a>
+<span class="sourceLineNo">488</span> // Obtain the auth token from peer cluster<a name="line.488"></a>
+<span class="sourceLineNo">489</span> TableMapReduceUtil.initCredentialsForCluster(job, peerClusterConf);<a name="line.489"></a>
+<span class="sourceLineNo">490</span> }<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span> job.setOutputFormatClass(NullOutputFormat.class);<a name="line.492"></a>
+<span class="sourceLineNo">493</span> job.setNumReduceTasks(0);<a name="line.493"></a>
+<span class="sourceLineNo">494</span> return job;<a name="line.494"></a>
+<span class="sourceLineNo">495</span> }<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span> private static void setRowPrefixFilter(Scan scan, String rowPrefixes) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span> if (rowPrefixes != null && !rowPrefixes.isEmpty()) {<a name="line.498"></a>
+<span class="sourceLineNo">499</span> String[] rowPrefixArray = rowPrefixes.split(",");<a name="line.499"></a>
+<span class="sourceLineNo">500</span> Arrays.sort(rowPrefixArray);<a name="line.500"></a>
+<span class="sourceLineNo">501</span> FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);<a name="line.501"></a>
+<span class="sourceLineNo">502</span> for (String prefix : rowPrefixArray) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span> Filter filter = new PrefixFilter(Bytes.toBytes(prefix));<a name="line.503"></a>
+<span class="sourceLineNo">504</span> filterList.addFilter(filter);<a name="line.504"></a>
+<span class="sourceLineNo">505</span> }<a name="line.505"></a>
+<span class="sourceLineNo">506</span> scan.setFilter(filterList);<a name="line.506"></a>
+<span class="sourceLineNo">507</span> byte[] startPrefixRow = Bytes.toBytes(rowPrefixArray[0]);<a name="line.507"></a>
+<span class="sourceLineNo">508</span> byte[] lastPrefixRow = Bytes.toBytes(rowPrefixArray[rowPrefixArray.length -1]);<a name="line.508"></a>
+<span class="sourceLineNo">509</span> setStartAndStopRows(scan, startPrefixRow, lastPrefixRow);<a name="line.509"></a>
+<span class="sourceLineNo">510</span> }<a name="line.510"></a>
+<span class="sourceLineNo">511</span> }<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span> private static void setStartAndStopRows(Scan scan, byte[] startPrefixRow, byte[] lastPrefixRow) {<a name="line.513"></a>
+<span class="sourceLineNo">514</span> scan.setStartRow(startPrefixRow);<a name="line.514"></a>
+<span class="sourceLineNo">515</span> byte[] stopRow = Bytes.add(Bytes.head(lastPrefixRow, lastPrefixRow.length - 1),<a name="line.515"></a>
+<span class="sourceLineNo">516</span> new byte[]{(byte) (lastPrefixRow[lastPrefixRow.length - 1] + 1)});<a name="line.516"></a>
+<span class="sourceLineNo">517</span> scan.setStopRow(stopRow);<a name="line.517"></a>
+<span class="sourceLineNo">518</span> }<a name="line.518"></a>
+<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">520</span> @VisibleForTesting<a name="line.520"></a>
+<span class="sourceLineNo">521</span> public boolean doCommandLine(final String[] args) {<a name="line.521"></a>
+<span class="sourceLineNo">522</span> if (args.length < 2) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span> printUsage(null);<a name="line.523"></a>
+<span class="sourceLineNo">524</span> return false;<a name="line.524"></a>
+<span class="sourceLineNo">525</span> }<a name="line.525"></a>
+<span class="sourceLineNo">526</span> try {<a name="line.526"></a>
+<span class="sourceLineNo">527</span> for (int i = 0; i < args.length; i++) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span> String cmd = args[i];<a name="line.528"></a>
+<span class="sourceLineNo">529</span> if (cmd.equals("-h") || cmd.startsWith("--h")) {<a name="line.529"></a>
+<span class="sourceLineNo">530</span> printUsage(null);<a name="line.530"></a>
+<span class="sourceLineNo">531</span> return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span> }<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span> final String startTimeArgKey = "--starttime=";<a name="line.534"></a>
+<span class="sourceLineNo">535</span> if (cmd.startsWith(startTimeArgKey)) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span> startTime = Long.parseLong(cmd.substring(startTimeArgKey.length()));<a name="line.536"></a>
+<span class="sourceLineNo">537</span> continue;<a name="line.537"></a>
+<span class="sourceLineNo">538</span> }<a name="line.538"></a>
+<span class="sourceLineNo">539</span><a name="line.539"></a>
+<span class="sourceLineNo">540</span> final String endTimeArgKey = "--endtime=";<a name="line.540"></a>
+<span class="sourceLineNo">541</span> if (cmd.startsWith(endTimeArgKey)) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span> endTime = Long.parseLong(cmd.substring(endTimeArgKey.length()));<a name="line.542"></a>
+<span class="sourceLineNo">543</span> continue;<a name="line.543"></a>
+<span class="sourceLineNo">544</span> }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span> final String includeDeletedCellsArgKey = "--raw";<a name="line.546"></a>
+<span class="sourceLineNo">547</span> if (cmd.equals(includeDeletedCellsArgKey)) {<a name="line.547"></a>
+<span class="sourceLineNo">548</span> includeDeletedCells = true;<a name="line.548"></a>
+<span class="sourceLineNo">549</span> continue;<a name="line.549"></a>
+<span class="sourceLineNo">550</span> }<a name="line.550"></a>
+<span class="sourceLineNo">551</span><a name="line.551"></a>
+<span class="sourceLineNo">552</span> final String versionsArgKey = "--versions=";<a name="line.552"></a>
+<span class="sourceLineNo">553</span> if (cmd.startsWith(versionsArgKey)) {<a name="line.553"></a>
+<span class="sourceLineNo">554</span> versions = Integer.parseInt(cmd.substring(versionsArgKey.length()));<a name="line.554"></a>
+<span class="sourceLineNo">555</span> continue;<a name="line.555"></a>
+<span class="sourceLineNo">556</span> }<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span> final String batchArgKey = "--batch=";<a name="line.558"></a>
+<span class="sourceLineNo">559</span> if (cmd.startsWith(batchArgKey)) {<a name="line.559"></a>
+<span class="sourceLineNo">560</span> batch = Integer.parseInt(cmd.substring(batchArgKey.length()));<a name="line.560"></a>
+<span class="sourceLineNo">561</span> continue;<a name="line.561"></a>
+<span class="sourceLineNo">562</span> }<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
+<span class="sourceLineNo">564</span> final String familiesArgKey = "--families=";<a name="line.564"></a>
+<span class="sourceLineNo">565</span> if (cmd.startsWith(familiesArgKey)) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span> families = cmd.substring(familiesArgKey.length());<a name="line.566"></a>
+<span class="sourceLineNo">567</span> continue;<a name="line.567"></a>
+<span class="sourceLineNo">568</span> }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span> final String rowPrefixesKey = "--row-prefixes=";<a name="line.570"></a>
+<span class="sourceLineNo">571</span> if (cmd.startsWith(rowPrefixesKey)){<a name="line.571"></a>
+<span class="sourceLineNo">572</span> rowPrefixes = cmd.substring(rowPrefixesKey.length());<a name="line.572"></a>
+<span class="sourceLineNo">573</span> continue;<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> final String delimiterArgKey = "--delimiter=";<a name="line.576"></a>
+<span class="sourceLineNo">577</span> if (cmd.startsWith(delimiterArgKey)) {<a name="line.577"></a>
+<span class="sourceLineNo">578</span> delimiter = cmd.substring(delimiterArgKey.length());<a name="line.578"></a>
+<span class="sourceLineNo">579</span> continue;<a name="line.579"></a>
+<span class="sourceLineNo">580</span> }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span> final String sleepToReCompareKey = "--recomparesleep=";<a name="line.582"></a>
+<span class="sourceLineNo">583</span> if (cmd.startsWith(sleepToReCompareKey)) {<a name="line.583"></a>
+<span class="sourceLineNo">584</span> sleepMsBeforeReCompare = Integer.parseInt(cmd.substring(sleepToReCompareKey.length()));<a name="line.584"></a>
+<span class="sourceLineNo">585</span> continue;<a name="line.585"></a>
+<span class="sourceLineNo">586</span> }<a name="line.586"></a>
+<span class="sourceLineNo">587</span> final String verboseKey = "--verbose";<a name="line.587"></a>
+<span class="sourceLineNo">588</span> if (cmd.startsWith(verboseKey)) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span> verbose = true;<a name="line.589"></a>
+<span class="sourceLineNo">590</span> continue;<a name="line.590"></a>
+<span class="sourceLineNo">591</span> }<a name="line.591"></a>
+<span class="sourceLineNo">592</span><a name="line.592"></a>
+<span class="sourceLineNo">593</span> final String sourceSnapshotNameArgKey = "--sourceSnapshotName=";<a name="line.593"></a>
+<span class="sourceLineNo">594</span> if (cmd.startsWith(sourceSnapshotNameArgKey)) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span> sourceSnapshotName = cmd.substring(sourceSnapshotNameArgKey.length());<a name="line.595"></a>
+<span class="sourceLineNo">596</span> continue;<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> final String sourceSnapshotTmpDirArgKey = "--sourceSnapshotTmpDir=";<a name="line.599"></a>
+<span class="sourceLineNo">600</span> if (cmd.startsWith(sourceSnapshotTmpDirArgKey)) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span> sourceSnapshotTmpDir = cmd.substring(sourceSnapshotTmpDirArgKey.length());<a name="line.601"></a>
+<span class="sourceLineNo">602</span> continue;<a name="line.602"></a>
+<span class="sourceLineNo">603</span> }<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span> final String peerSnapshotNameArgKey = "--peerSnapshotName=";<a name="line.605"></a>
+<span class="sourceLineNo">606</span> if (cmd.startsWith(peerSnapshotNameArgKey)) {<a name="line.606"></a>
+<span class="sourceLineNo">607</span> peerSnapshotName = cmd.substring(peerSnapshotNameArgKey.length());<a name="line.607"></a>
+<span class="sourceLineNo">608</span> continue;<a name="line.608"></a>
+<span class="sourceLineNo">609</span> }<a name="line.609"></a>
+<span class="sourceLineNo">610</span><a name="line.610"></a>
+<span class="sourceLineNo">611</span> final String peerSnapshotTmpDirArgKey = "--peerSnapshotTmpDir=";<a name="line.611"></a>
+<span class="sourceLineNo">612</span> if (cmd.startsWith(peerSnapshotTmpDirArgKey)) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span> peerSnapshotTmpDir = cmd.substring(peerSnapshotTmpDirArgKey.length());<a name="line.613"></a>
+<span class="sourceLineNo">614</span> continue;<a name="line.614"></a>
+<span class="sourceLineNo">615</span> }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span> final String peerFSAddressArgKey = "--peerFSAddress=";<a name="line.617"></a>
+<span class="sourceLineNo">618</span> if (cmd.startsWith(peerFSAddressArgKey)) {<a name="line.618"></a>
+<span class="sourceLineNo">619</span> peerFSAddress = cmd.substring(peerFSAddressArgKey.length());<a name="line.619"></a>
+<span class="sourceLineNo">620</span> continue;<a name="line.620"></a>
+<span class="sourceLineNo">621</span> }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span> final String peerHBaseRootAddressArgKey = "--peerHBaseRootAddress=";<a name="line.623"></a>
+<span class="sourceLineNo">624</span> if (cmd.startsWith(peerHBaseRootAddressArgKey)) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span> peerHBaseRootAddress = cmd.substring(peerHBaseRootAddressArgKey.length());<a name="line.625"></a>
+<span class="sourceLineNo">626</span> continue;<a name="line.626"></a>
+<span class="sourceLineNo">627</span> }<a name="line.627"></a>
+<span class="sourceLineNo">628</span><a name="line.628"></a>
+<span class="sourceLineNo">629</span> final String peerTableNameArgKey = "--peerTableName=";<a name="line.629"></a>
+<span class="sourceLineNo">630</span> if (cmd.startsWith(peerTableNameArgKey)) {<a name="line.630"></a>
+<span class="sourceLineNo">631</span> peerTableName = cmd.substring(peerTableNameArgKey.length());<a name="line.631"></a>
+<span class="sourceLineNo">632</span> continue;<a name="line.632"></a>
+<span class="sourceLineNo">633</span> }<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span> if (cmd.startsWith("--")) {<a name="line.635"></a>
+<span class="sourceLineNo">636</span> printUsage("Invalid argument '" + cmd + "'");<a name="line.636"></a>
+<span class="sourceLineNo">637</span> return false;<a name="line.637"></a>
+<span class="sourceLineNo">638</span> }<a name="line.638"></a>
+<span class="sourceLineNo">639</span><a name="line.639"></a>
+<span class="sourceLineNo">640</span> if (i == args.length-2) {<a name="line.640"></a>
+<span class="sourceLineNo">641</span> if (isPeerQuorumAddress(cmd)) {<a name="line.641"></a>
+<span class="sourceLineNo">642</span> peerQuorumAddress = cmd;<a name="line.642"></a>
+<span class="sourceLineNo">643</span> } else {<a name="line.643"></a>
+<span class="sourceLineNo">644</span> peerId = cmd;<a name="line.644"></a>
+<span class="sourceLineNo">645</span> }<a name="line.645"></a>
+<span class="sourceLineNo">646</span> }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span> if (i == args.length-1) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span> tableName = cmd;<a name="line.649"></a>
+<span class="sourceLineNo">650</span> }<a name="line.650"></a>
+<span class="sourceLineNo">651</span> }<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span> if ((sourceSnapshotName != null && sourceSnapshotTmpDir == null)<a name="line.653"></a>
+<span class="sourceLineNo">654</span> || (sourceSnapshotName == null && sourceSnapshotTmpDir != null)) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span> printUsage("Source snapshot name and snapshot temp location should be provided"<a name="line.655"></a>
+<span class="sourceLineNo">656</span> + " to use snapshots in source cluster");<a name="line.656"></a>
+<span class="sourceLineNo">657</span> return false;<a name="line.657"></a>
+<span class="sourceLineNo">658</span> }<a name="line.658"></a>
+<span class="sourceLineNo">659</span><a name="line.659"></a>
+<span class="sourceLineNo">660</span> if (peerSnapshotName != null || peerSnapshotTmpDir != null || peerFSAddress != null<a name="line.660"></a>
+<span class="sourceLineNo">661</span> || peerHBaseRootAddress != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span> if (peerSnapshotName == null || peerSnapshotTmpDir == null || peerFSAddress == null<a name="line.662"></a>
+<span class="sourceLineNo">663</span> || peerHBaseRootAddress == null) {<a name="line.663"></a>
+<span class="sourceLineNo">664</span> printUsage(<a name="line.664"></a>
+<span class="sourceLineNo">665</span> "Peer snapshot name, peer snapshot temp location, Peer HBase root address and "<a name="line.665"></a>
+<span class="sourceLineNo">666</span> + "peer FSAddress should be provided to use snapshots in peer cluster");<a name="line.666"></a>
+<span class="sourceLineNo">667</span> return false;<a name="line.667"></a>
+<span class="sourceLineNo">668</span> }<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> private boolean isPeerQuorumAddress(String cmd) {<a name="line.671"></a>
-<span class="sourceLineNo">672</span> try {<a name="line.672"></a>
-<span class="sourceLineNo">673</span> ZKConfig.validateClusterKey(cmd);<a name="line.673"></a>
-<span class="sourceLineNo">674</span> } catch (IOException e) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span> // not a quorum address<a name="line.675"></a>
-<span class="sourceLineNo">676</span> return false;<a name="line.676"></a>
-<span class="sourceLineNo">677</span> }<a name="line.677"></a>
-<span class="sourceLineNo">678</span> return true;<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>
-<span class="sourceLineNo">682</span> * @param errorMsg Error message. Can be null.<a name="line.682"></a>
-<span class="sourceLineNo">683</span> */<a name="line.683"></a>
-<span class="sourceLineNo">684</span> private static void printUsage(final String errorMsg) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span> if (errorMsg != null && errorMsg.length() > 0) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span> System.err.println("ERROR: " + errorMsg);<a name="line.686"></a>
-<span class="sourceLineNo">687</span> }<a name="line.687"></a>
-<span class="sourceLineNo">688</span> System.err.println("Usage: verifyrep [--starttime=X]" +<a name="line.688"></a>
-<span class="sourceLineNo">689</span> " [--endtime=Y] [--families=A] [--row-prefixes=B] [--delimiter=] [--recomparesleep=] " +<a name="line.689"></a>
-<span class="sourceLineNo">690</span> "[--batch=] [--verbose] [--sourceSnapshotName=P] [--sourceSnapshotTmpDir=Q] "<a name="line.690"></a>
-<span class="sourceLineNo">691</span> + "[--peerSnapshotName=R] [--peerSnapshotTmpDir=S] [--peerFSAddress=T] "<a name="line.691"></a>
-<span class="sourceLineNo">692</span> + "[--peerHBaseRootAddress=U] <peerid|peerQuorumAddress> <tablename>");<a name="line.692"></a>
-<span class="sourceLineNo">693</span> System.err.println();<a name="line.693"></a>
-<span class="sourceLineNo">694</span> System.err.println("Options:");<a name="line.694"></a>
-<span class="sourceLineNo">695</span> System.err.println(" starttime beginning of the time range");<a name="line.695"></a>
-<span class="sourceLineNo">696</span> System.err.println(" without endtime means from starttime to forever");<a name="line.696"></a>
-<span class="sourceLineNo">697</span> System.err.println(" endtime end of the time range");<a name="line.697"></a>
-<span class="sourceLineNo">698</span> System.err.println(" versions number of cell versions to verify");<a name="line.698"></a>
-<span class="sourceLineNo">699</span> System.err.println(" batch batch count for scan, " +<a name="line.699"></a>
-<span class="sourceLineNo">700</span> "note that result row counts will no longer be actual number of rows when you use this option");<a name="line.700"></a>
-<span class="sourceLineNo">701</span> System.err.println(" raw includes raw scan if given in options");<a name="line.701"></a>
-<span class="sourceLineNo">702</span> System.err.println(" families comma-separated list of families to copy");<a name="line.702"></a>
-<span class="sourceLineNo">703</span> System.err.println(" row-prefixes comma-separated list of row key prefixes to filter on ");<a name="line.703"></a>
-<span class="sourceLineNo">704</span> System.err.println(" delimiter the delimiter used in display around rowkey");<a name="line.704"></a>
-<span class="sourceLineNo">705</span> System.err.println(" recomparesleep milliseconds to sleep before recompare row, " +<a name="line.705"></a>
-<span class="sourceLineNo">706</span> "default value is 0 which disables the recompare.");<a name="line.706"></a>
-<span class="sourceLineNo">707</span> System.err.println(" verbose logs row keys of good rows");<a name="line.707"></a>
-<span class="sourceLineNo">708</span> System.err.println(" sourceSnapshotName Source Snapshot Name");<a name="line.708"></a>
-<span class="sourceLineNo">709</span> System.err.println(" sourceSnapshotTmpDir Tmp location to restore source table snapshot");<a name="line.709"></a>
-<span class="sourceLineNo">710</span> System.err.println(" peerSnapshotName Peer Snapshot Name");<a name="line.710"></a>
-<span class="sourceLineNo">711</span> System.err.println(" peerSnapshotTmpDir Tmp location to restore peer table snapshot");<a name="line.711"></a>
-<span class="sourceLineNo">712</span> System.err.println(" peerFSAddress Peer cluster Hadoop FS address");<a name="line.712"></a>
-<span class="sourceLineNo">713</span> System.err.println(" peerHBaseRootAddress Peer cluster HBase root location");<a name="line.713"></a>
-<span class="sourceLineNo">714</span> System.err.println();<a name="line.714"></a>
-<span class="sourceLineNo">715</span> System.err.println("Args:");<a name="line.715"></a>
-<span class="sourceLineNo">716</span> System.err.println(" peerid Id of the peer used for verification, must match the one given for replication");<a name="line.716"></a>
-<span class="sourceLineNo">717</span> System.err.println(" peerQuorumAddress quorumAdress of the peer used for verification. The "<a name="line.717"></a>
-<span class="sourceLineNo">718</span> + "format is zk_quorum:zk_port:zk_hbase_path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span> System.err.println(" tablename Name of the table to verify");<a name="line.719"></a>
-<span class="sourceLineNo">720</span> System.err.println();<a name="line.720"></a>
-<span class="sourceLineNo">721</span> System.err.println("Examples:");<a name="line.721"></a>
-<span class="sourceLineNo">722</span> System.err.println(" To verify the data replicated from TestTable for a 1 hour window with peer #5 ");<a name="line.722"></a>
-<span class="sourceLineNo">723</span> System.err.println(" $ hbase " +<a name="line.723"></a>
-<span class="sourceLineNo">724</span> "org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication" +<a name="line.724"></a>
-<span class="sourceLineNo">725</span> " --starttime=1265875194289 --endtime=1265878794289 5 TestTable ");<a name="line.725"></a>
-<span class="sourceLineNo">726</span> }<a name="line.726"></a>
-<span class="sourceLineNo">727</span><a name="line.727"></a>
-<span class="sourceLineNo">728</span> @Override<a name="line.728"></a>
-<span class="sourceLineNo">729</span> public int run(String[] args) throws Exception {<a name="line.729"></a>
-<span class="sourceLineNo">730</span> Configuration conf = this.getConf();<a name="line.730"></a>
-<span class="sourceLineNo">731</span> Job job = createSubmittableJob(conf, args);<a name="line.731"></a>
-<span class="sourceLineNo">732</span> if (job != null) {<a name="line.732"></a>
-<span class="sourceLineNo">733</span> return job.waitForCompletion(true) ? 0 : 1;<a name="line.733"></a>
-<span class="sourceLineNo">734</span> }<a name="line.734"></a>
-<span class="sourceLineNo">735</span> return 1;<a name="line.735"></a>
-<span class="sourceLineNo">736</span> }<a name="line.736"></a>
-<span class="sourceLineNo">737</span><a name="line.737"></a>
-<span class="sourceLineNo">738</span> /**<a name="line.738"></a>
-<span class="sourceLineNo">739</span> * Main entry point.<a name="line.739"></a>
-<span class="sourceLineNo">740</span> *<a name="line.740"></a>
-<span class="sourceLineNo">741</span> * @param args The command line parameters.<a name="line.741"></a>
-<span class="sourceLineNo">742</span> * @throws Exception When running the job fails.<a name="line.742"></a>
-<span class="sourceLineNo">743</span> */<a name="line.743"></a>
-<span class="sourceLineNo">744</span> public static void main(String[] args) throws Exception {<a name="line.744"></a>
-<span class="sourceLineNo">745</span> int res = ToolRunner.run(HBaseConfiguration.create(), new VerifyReplication(), args);<a name="line.745"></a>
-<span class="sourceLineNo">746</span> System.exit(res);<a name="line.746"></a>
-<span class="sourceLineNo">747</span> }<a name="line.747"></a>
-<span class="sourceLineNo">748</span>}<a name="line.748"></a>
+<span class="sourceLineNo">671</span> // This is to avoid making recompare calls to source/peer tables when snapshots are used<a name="line.671"></a>
+<span class="sourceLineNo">672</span> if ((sourceSnapshotName != null || peerSnapshotName != null) && sleepMsBeforeReCompare > 0) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span> printUsage(<a name="line.673"></a>
+<span class="sourceLineNo">674</span> "Using sleepMsBeforeReCompare along with snapshots is not allowed as snapshots are immutable");<a name="line.674"></a>
+<span class="sourceLineNo">675</span> return false;<a name="line.675"></a>
+<span class="sourceLineNo">676</span> }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span> } catch (Exception e) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span> LOG.error("Failed to parse commandLine arguments", e);<a name="line.679"></a>
+<span class="sourceLineNo">680</span> printUsage("Can't start because " + e.getMessage());<a name="line.680"></a>
+<span class="sourceLineNo">681</span> return false;<a name="line.681"></a>
+<span class="sourceLineNo">682</span> }<a name="line.682"></a>
+<span class="sourceLineNo">683</span> return true;<a name="line.683"></a>
+<span class="sourceLineNo">684</span> }<a name="line.684"></a>
+<span class="sourceLineNo">685</span><a name="line.685"></a>
+<span class="sourceLineNo">686</span> private boolean isPeerQuorumAddress(String cmd) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span> try {<a name="line.687"></a>
+<span class="sourceLineNo">688</span> ZKConfig.validateClusterKey(cmd);<a name="line.688"></a>
+<span class="sourceLineNo">689</span> } catch (IOException e) {<a name="line.689"></a>
+<span class="sourceLineNo">690</span> // not a quorum address<a name="line.690"></a>
+<span class="sourceLineNo">691</span> return false;<a name="line.691"></a>
+<span class="sourceLineNo">692</span> }<a name="line.692"></a>
+<span class="sourceLineNo">693</span> return true;<a name="line.693"></a>
+<span class="sourceLineNo">694</span> }<a name="line.694"></a>
+<span class="sourceLineNo">695</span><a name="line.695"></a>
+<span class="sourceLineNo">696</span> /*<a name="line.696"></a>
+<span class="sourceLineNo">697</span> * @param errorMsg Error message. Can be null.<a name="line.697"></a>
+<span class="sourceLineNo">698</span> */<a name="line.698"></a>
+<span class="sourceLineNo">699</span> private static void printUsage(final String errorMsg) {<a name="line.699"></a>
+<span class="sourceLineNo">700</span> if (errorMsg != null && errorMsg.length() > 0) {<a name="line.700"></a>
+<span class="sourceLineNo">701</span> System.err.println("ERROR: " + errorMsg);<a name="line.701"></a>
+<span class="sourceLineNo">702</span> }<a name="line.702"></a>
+<span class="sourceLineNo">703</span> System.err.println("Usage: verifyrep [--starttime=X]"<a name="line.703"></a>
+<span class="sourceLineNo">704</span> + " [--endtime=Y] [--families=A] [--row-prefixes=B] [--delimiter=] [--recomparesleep=] "<a name="line.704"></a>
+<span class="sourceLineNo">705</span> + "[--batch=] [--verbose] [--peerTableName=] [--sourceSnapshotName=P] "<a name="line.705"></a>
+<span class="sourceLineNo">706</span> + "[--sourceSnapshotTmpDir=Q] [--peerSnapshotName=R] [--peerSnapshotTmpDir=S] "<a name="line.706"></a>
+<span class="sourceLineNo">707</span> + "[--peerFSAddress=T] [--peerHBaseRootAddress=U] <peerid|peerQuorumAddress> <tablename>");<a name="line.707"></a>
+<span class="sourceLineNo">708</span> System.err.println();<a name="line.708"></a>
+<span class="sourceLineNo">709</span> System.err.println("Options:");<a name="line.709"></a>
+<span class="sourceLineNo">710</span> System.err.println(" starttime beginning of the time range");<a name="line.710"></a>
+<span class="sourceLineNo">711</span> System.err.println(" without endtime means from starttime to forever");<a name="line.711"></a>
+<span class="sourceLineNo">712</span> System.err.println(" endtime end of the time range");<a name="line.712"></a>
+<span class="sourceLineNo">713</span> System.err.println(" versions number of cell versions to verify");<a name="line.713"></a>
+<span class="sourceLineNo">714</span> System.err.println(" batch batch count for scan, " +<a name="line.714"></a>
+<span class="sourceLineNo">715</span> "note that result row counts will no longer be actual number of rows when you use this option");<a name="line.715"></a>
+<span class="sourceLineNo">716</span> System.err.println(" raw includes raw scan if given in options");<a name="line.716"></a>
+<span class="sourceLineNo">717</span> System.err.println(" families comma-separated list of families to copy");<a name="line.717"></a>
+<span class="sourceLineNo">718</span> System.err.println(" row-prefixes comma-separated list of row key prefixes to filter on ");<a name="line.718"></a>
+<span class="sourceLineNo">719</span> System.err.println(" delimiter the delimiter used in display around rowkey");<a name="line.719"></a>
+<span class="sourceLineNo">720</span> System.err.println(" recomparesleep milliseconds to sleep before recompare row, " +<a name="line.720"></a>
+<span class="sourceLineNo">721</span> "default value is 0 which disables the recompare.");<a name="line.721"></a>
+<span class="sourceLineNo">722</span> System.err.println(" verbose logs row keys of good rows");<a name="line.722"></a>
+<span class="sourceLineNo">723</span> System.err.println(" peerTableName Peer Table Name");<a name="line.723"></a>
+<span class="sourceLineNo">724</span> System.err.println(" sourceSnapshotName Source Snapshot Name");<a name="line.724"></a>
+<span class="sourceLineNo">725</span> System.err.println(" sourceSnapshotTmpDir Tmp location to restore source table snapshot");<a name="line.725"></a>
+<span class="sourceLineNo">726</span> System.err.println(" peerSnapshotName Peer Snapshot Name");<a name="line.726"></a>
+<span class="sourceLineNo">727</span> System.err.println(" peerSnapshotTmpDir Tmp location to restore peer table snapshot");<a name="line.727"></a>
+<span class="sourceLineNo">728</span> System.err.println(" peerFSAddress Peer cluster Hadoop FS address");<a name="line.728"></a>
+<span class="sourceLineNo">729</span> System.err.println(" peerHBaseRootAddress Peer cluster HBase root location");<a name="line.729"></a>
+<span class="sourceLineNo">730</span> System.err.println();<a name="line.730"></a>
+<span class="sourceLineNo">731</span> System.err.println("Args:");<a name="line.731"></a>
+<span class="sourceLineNo">732</span> System.err.println(" peerid Id of the peer used for verification, must match the one given for replication");<a name="line.732"></a>
+<span class="sourceLineNo">733</span> System.err.println(" peerQuorumAddress quorumAdress of the peer used for verification. The "<a name="line.733"></a>
+<span class="sourceLineNo">734</span> + "format is zk_quorum:zk_port:zk_hbase_path");<a name="line.734"></a>
+<span class="sourceLineNo">735</span> System.err.println(" tablename Name of the table to verify");<a name="line.735"></a>
+<span class="sourceLineNo">736</span> System.err.println();<a name="line.736"></a>
+<span class="sourceLineNo">737</span> System.err.println("Examples:");<a name="line.737"></a>
+<span class="sourceLineNo">738</span> System.err.println(" To verify the data replicated from TestTable for a 1 hour window with peer #5 ");<a name="line.738"></a>
+<span class="sourceLineNo">739</span> System.err.println(" $ hbase " +<a name="line.739"></a>
+<span class="sourceLineNo">740</span> "org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication" +<a name="line.740"></a>
+<span class="sourceLineNo">741</span> " --starttime=1265875194289 --endtime=1265878794289 5 TestTable ");<a name="line.741"></a>
+<span class="sourceLineNo">742</span> }<a name="line.742"></a>
+<span class="sourceLineNo">743</span><a name="line.743"></a>
+<span class="sourceLineNo">744</span> @Override<a name="line.744"></a>
+<span class="sourceLineNo">745</span> public int run(String[] args) throws Exception {<a name="line.745"></a>
+<span class="sourceLineNo">746</span> Configuration conf = this.getConf();<a name="line.746"></a>
+<span class="sourceLineNo">747</span> Job job = createSubmittableJob(conf, args);<a name="line.747"></a>
+<span class="sourceLineNo">748</span> if (job != null) {<a name="line.748"></a>
+<span class="sourceLineNo">749</span> return job.waitForCompletion(true) ? 0 : 1;<a name="line.749"></a>
+<span class="sourceLineNo">750</span> }<a name="line.750"></a>
+<span class="sourceLineNo">751</span> return 1;<a name="line.751"></a>
+<span class="sourceLineNo">752</span> }<a name="line.752"></a>
+<span class="sourceLineNo">753</span><a name="line.753"></a>
+<span class="sourceLineNo">754</span> /**<a name="line.754"></a>
+<span class="sourceLineNo">755</span> * Main entry point.<a name="line.755"></a>
+<span class="sourceLineNo">756</span> *<a name="line.756"></a>
+<span class="sourceLineNo">757</span> * @param args The command line parameters.<a name="line.757"></a>
+<span class="sourceLineNo">758</span> * @throws Exception When running the job fails.<a name="line.758"></a>
+<span class="sourceLineNo">759</span> */<a name="line.759"></a>
+<span class="sourceLineNo">760</span> public static void main(String[] args) throws Exception {<a name="line.760"></a>
+<span class="sourceLineNo">761</span> int res = ToolRunner.run(HBaseConfiguration.create(), new VerifyReplication(), args);<a name="line.761"></a>
+<span class="sourceLineNo">762</span> System.exit(res);<a name="line.762"></a>
+<span class="sourceLineNo">763</span> }<a name="line.763"></a>
+<span class="sourceLineNo">764</span>}<a name="line.764"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RESTServer.html b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RESTServer.html
index 4f04d17..469a5c9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/rest/RESTServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/rest/RESTServer.html
@@ -111,327 +111,330 @@
<span class="sourceLineNo">103</span> "hbase.rest-csrf.browser-useragents-regex";<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span> // HACK, making this static for AuthFilter to get at our configuration. Necessary for unit tests.<a name="line.105"></a>
-<span class="sourceLineNo">106</span> public static Configuration conf = null;<a name="line.106"></a>
-<span class="sourceLineNo">107</span> private final UserProvider userProvider;<a name="line.107"></a>
-<span class="sourceLineNo">108</span> private Server server;<a name="line.108"></a>
-<span class="sourceLineNo">109</span> private InfoServer infoServer;<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span> public RESTServer(Configuration conf) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span> RESTServer.conf = conf;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> this.userProvider = UserProvider.instantiate(conf);<a name="line.113"></a>
-<span class="sourceLineNo">114</span> }<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> private static void printUsageAndExit(Options options, int exitCode) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span> HelpFormatter formatter = new HelpFormatter();<a name="line.117"></a>
-<span class="sourceLineNo">118</span> formatter.printHelp("hbase rest start", "", options,<a name="line.118"></a>
-<span class="sourceLineNo">119</span> "\nTo run the REST server as a daemon, execute " +<a name="line.119"></a>
-<span class="sourceLineNo">120</span> "hbase-daemon.sh start|stop rest [--infoport <port>] [-p <port>] [-ro]\n", true);<a name="line.120"></a>
-<span class="sourceLineNo">121</span> System.exit(exitCode);<a name="line.121"></a>
-<span class="sourceLineNo">122</span> }<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span> void addCSRFFilter(ServletContextHandler ctxHandler, Configuration conf) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span> restCSRFEnabled = conf.getBoolean(REST_CSRF_ENABLED_KEY, REST_CSRF_ENABLED_DEFAULT);<a name="line.125"></a>
-<span class="sourceLineNo">126</span> if (restCSRFEnabled) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span> Map<String, String> restCsrfParams = RestCsrfPreventionFilter<a name="line.127"></a>
-<span class="sourceLineNo">128</span> .getFilterParams(conf, "hbase.rest-csrf.");<a name="line.128"></a>
-<span class="sourceLineNo">129</span> FilterHolder holder = new FilterHolder();<a name="line.129"></a>
-<span class="sourceLineNo">130</span> holder.setName("csrf");<a name="line.130"></a>
-<span class="sourceLineNo">131</span> holder.setClassName(RestCsrfPreventionFilter.class.getName());<a name="line.131"></a>
-<span class="sourceLineNo">132</span> holder.setInitParameters(restCsrfParams);<a name="line.132"></a>
-<span class="sourceLineNo">133</span> ctxHandler.addFilter(holder, PATH_SPEC_ANY, EnumSet.allOf(DispatcherType.class));<a name="line.133"></a>
-<span class="sourceLineNo">134</span> }<a name="line.134"></a>
-<span class="sourceLineNo">135</span> }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span> // login the server principal (if using secure Hadoop)<a name="line.137"></a>
-<span class="sourceLineNo">138</span> private static Pair<FilterHolder, Class<? extends ServletContainer>> loginServerPrincipal(<a name="line.138"></a>
-<span class="sourceLineNo">139</span> UserProvider userProvider, Configuration conf) throws Exception {<a name="line.139"></a>
-<span class="sourceLineNo">140</span> Class<? extends ServletContainer> containerClass = ServletContainer.class;<a name="line.140"></a>
-<span class="sourceLineNo">141</span> if (userProvider.isHadoopSecurityEnabled() && userProvider.isHBaseSecurityEnabled()) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span> String machineName = Strings.domainNamePointerToHostName(<a name="line.142"></a>
-<span class="sourceLineNo">143</span> DNS.getDefaultHost(conf.get(REST_DNS_INTERFACE, "default"),<a name="line.143"></a>
-<span class="sourceLineNo">144</span> conf.get(REST_DNS_NAMESERVER, "default")));<a name="line.144"></a>
-<span class="sourceLineNo">145</span> String keytabFilename = conf.get(REST_KEYTAB_FILE);<a name="line.145"></a>
-<span class="sourceLineNo">146</span> Preconditions.checkArgument(keytabFilename != null && !keytabFilename.isEmpty(),<a name="line.146"></a>
-<span class="sourceLineNo">147</span> REST_KEYTAB_FILE + " should be set if security is enabled");<a name="line.147"></a>
-<span class="sourceLineNo">148</span> String principalConfig = conf.get(REST_KERBEROS_PRINCIPAL);<a name="line.148"></a>
-<span class="sourceLineNo">149</span> Preconditions.checkArgument(principalConfig != null && !principalConfig.isEmpty(),<a name="line.149"></a>
-<span class="sourceLineNo">150</span> REST_KERBEROS_PRINCIPAL + " should be set if security is enabled");<a name="line.150"></a>
-<span class="sourceLineNo">151</span> // Hook for unit tests, this will log out any other user and mess up tests.<a name="line.151"></a>
-<span class="sourceLineNo">152</span> if (!conf.getBoolean(SKIP_LOGIN_KEY, false)) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span> userProvider.login(REST_KEYTAB_FILE, REST_KERBEROS_PRINCIPAL, machineName);<a name="line.153"></a>
-<span class="sourceLineNo">154</span> }<a name="line.154"></a>
-<span class="sourceLineNo">155</span> if (conf.get(REST_AUTHENTICATION_TYPE) != null) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> containerClass = RESTServletContainer.class;<a name="line.156"></a>
-<span class="sourceLineNo">157</span> FilterHolder authFilter = new FilterHolder();<a name="line.157"></a>
-<span class="sourceLineNo">158</span> authFilter.setClassName(AuthFilter.class.getName());<a name="line.158"></a>
-<span class="sourceLineNo">159</span> authFilter.setName("AuthenticationFilter");<a name="line.159"></a>
-<span class="sourceLineNo">160</span> return new Pair<>(authFilter,containerClass);<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> return new Pair<>(null, containerClass);<a name="line.163"></a>
-<span class="sourceLineNo">164</span> }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span> private static void parseCommandLine(String[] args, Configuration conf) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span> Options options = new Options();<a name="line.167"></a>
-<span class="sourceLineNo">168</span> options.addOption("p", "port", true, "Port to bind to [default: " + DEFAULT_LISTEN_PORT + "]");<a name="line.168"></a>
-<span class="sourceLineNo">169</span> options.addOption("ro", "readonly", false, "Respond only to GET HTTP " +<a name="line.169"></a>
-<span class="sourceLineNo">170</span> "method requests [default: false]");<a name="line.170"></a>
-<span class="sourceLineNo">171</span> options.addOption(null, "infoport", true, "Port for web UI");<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span> CommandLine commandLine = null;<a name="line.173"></a>
-<span class="sourceLineNo">174</span> try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span> commandLine = new PosixParser().parse(options, args);<a name="line.175"></a>
-<span class="sourceLineNo">176</span> } catch (ParseException e) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span> LOG.error("Could not parse: ", e);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> printUsageAndExit(options, -1);<a name="line.178"></a>
-<span class="sourceLineNo">179</span> }<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span> // check for user-defined port setting, if so override the conf<a name="line.181"></a>
-<span class="sourceLineNo">182</span> if (commandLine != null && commandLine.hasOption("port")) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span> String val = commandLine.getOptionValue("port");<a name="line.183"></a>
-<span class="sourceLineNo">184</span> conf.setInt("hbase.rest.port", Integer.parseInt(val));<a name="line.184"></a>
-<span class="sourceLineNo">185</span> if (LOG.isDebugEnabled()) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span> LOG.debug("port set to " + val);<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><a name="line.189"></a>
-<span class="sourceLineNo">190</span> // check if server should only process GET requests, if so override the conf<a name="line.190"></a>
-<span class="sourceLineNo">191</span> if (commandLine != null && commandLine.hasOption("readonly")) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span> conf.setBoolean("hbase.rest.readonly", true);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> if (LOG.isDebugEnabled()) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span> LOG.debug("readonly set to true");<a name="line.194"></a>
-<span class="sourceLineNo">195</span> }<a name="line.195"></a>
-<span class="sourceLineNo">196</span> }<a name="line.196"></a>
-<span class="sourceLineNo">197</span><a name="line.197"></a>
-<span class="sourceLineNo">198</span> // check for user-defined info server port setting, if so override the conf<a name="line.198"></a>
-<span class="sourceLineNo">199</span> if (commandLine != null && commandLine.hasOption("infoport")) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span> String val = commandLine.getOptionValue("infoport");<a name="line.200"></a>
-<span class="sourceLineNo">201</span> conf.setInt("hbase.rest.info.port", Integer.parseInt(val));<a name="line.201"></a>
-<span class="sourceLineNo">202</span> if (LOG.isDebugEnabled()) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span> LOG.debug("Web UI port set to " + val);<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><a name="line.206"></a>
-<span class="sourceLineNo">207</span> if (commandLine != null && commandLine.hasOption("skipLogin")) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span> conf.setBoolean(SKIP_LOGIN_KEY, true);<a name="line.208"></a>
-<span class="sourceLineNo">209</span> if (LOG.isDebugEnabled()) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span> LOG.debug("Skipping Kerberos login for REST server");<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><a name="line.213"></a>
-<span class="sourceLineNo">214</span> List<String> remainingArgs = commandLine != null ? commandLine.getArgList() : new ArrayList<>();<a name="line.214"></a>
-<span class="sourceLineNo">215</span> if (remainingArgs.size() != 1) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span> printUsageAndExit(options, 1);<a name="line.216"></a>
-<span class="sourceLineNo">217</span> }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span> String command = remainingArgs.get(0);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if ("start".equals(command)) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> // continue and start container<a name="line.221"></a>
-<span class="sourceLineNo">222</span> } else if ("stop".equals(command)) {<a name="line.222"></a>
-<span class="sourceLineNo">223</span> System.exit(1);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> } else {<a name="line.224"></a>
-<span class="sourceLineNo">225</span> printUsageAndExit(options, 1);<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> /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span> * Runs the REST server.<a name="line.231"></a>
-<span class="sourceLineNo">232</span> */<a name="line.232"></a>
-<span class="sourceLineNo">233</span> public synchronized void run() throws Exception {<a name="line.233"></a>
-<span class="sourceLineNo">234</span> Pair<FilterHolder, Class<? extends ServletContainer>> pair = loginServerPrincipal(<a name="line.234"></a>
-<span class="sourceLineNo">235</span> userProvider, conf);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> FilterHolder authFilter = pair.getFirst();<a name="line.236"></a>
-<span class="sourceLineNo">237</span> Class<? extends ServletContainer> containerClass = pair.getSecond();<a name="line.237"></a>
-<span class="sourceLineNo">238</span> RESTServlet servlet = RESTServlet.getInstance(conf, userProvider);<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span> // set up the Jersey servlet container for Jetty<a name="line.240"></a>
-<span class="sourceLineNo">241</span> ResourceConfig application = new ResourceConfig().<a name="line.241"></a>
-<span class="sourceLineNo">242</span> packages("org.apache.hadoop.hbase.rest").register(JacksonJaxbJsonProvider.class);<a name="line.242"></a>
-<span class="sourceLineNo">243</span> // Using our custom ServletContainer is tremendously important. This is what makes sure the<a name="line.243"></a>
-<span class="sourceLineNo">244</span> // UGI.doAs() is done for the remoteUser, and calls are not made as the REST server itself.<a name="line.244"></a>
-<span class="sourceLineNo">245</span> ServletContainer servletContainer = ReflectionUtils.newInstance(containerClass, application);<a name="line.245"></a>
-<span class="sourceLineNo">246</span> ServletHolder sh = new ServletHolder(servletContainer);<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> // Set the default max thread number to 100 to limit<a name="line.248"></a>
-<span class="sourceLineNo">249</span> // the number of concurrent requests so that REST server doesn't OOM easily.<a name="line.249"></a>
-<span class="sourceLineNo">250</span> // Jetty set the default max thread number to 250, if we don't set it.<a name="line.250"></a>
-<span class="sourceLineNo">251</span> //<a name="line.251"></a>
-<span class="sourceLineNo">252</span> // Our default min thread number 2 is the same as that used by Jetty.<a name="line.252"></a>
-<span class="sourceLineNo">253</span> int maxThreads = servlet.getConfiguration().getInt(REST_THREAD_POOL_THREADS_MAX, 100);<a name="line.253"></a>
-<span class="sourceLineNo">254</span> int minThreads = servlet.getConfiguration().getInt(REST_THREAD_POOL_THREADS_MIN, 2);<a name="line.254"></a>
-<span class="sourceLineNo">255</span> // Use the default queue (unbounded with Jetty 9.3) if the queue size is negative, otherwise use<a name="line.255"></a>
-<span class="sourceLineNo">256</span> // bounded {@link ArrayBlockingQueue} with the given size<a name="line.256"></a>
-<span class="sourceLineNo">257</span> int queueSize = servlet.getConfiguration().getInt(REST_THREAD_POOL_TASK_QUEUE_SIZE, -1);<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int idleTimeout = servlet.getConfiguration().getInt(REST_THREAD_POOL_THREAD_IDLE_TIMEOUT, 60000);<a name="line.258"></a>
-<span class="sourceLineNo">259</span> QueuedThreadPool threadPool = queueSize > 0 ?<a name="line.259"></a>
-<span class="sourceLineNo">260</span> new QueuedThreadPool(maxThreads, minThreads, idleTimeout, new ArrayBlockingQueue<>(queueSize)) :<a name="line.260"></a>
-<span class="sourceLineNo">261</span> new QueuedThreadPool(maxThreads, minThreads, idleTimeout);<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span> this.server = new Server(threadPool);<a name="line.263"></a>
-<span class="sourceLineNo">264</span><a name="line.264"></a>
-<span class="sourceLineNo">265</span> // Setup JMX<a name="line.265"></a>
-<span class="sourceLineNo">266</span> MBeanContainer mbContainer=new MBeanContainer(ManagementFactory.getPlatformMBeanServer());<a name="line.266"></a>
-<span class="sourceLineNo">267</span> server.addEventListener(mbContainer);<a name="line.267"></a>
-<span class="sourceLineNo">268</span> server.addBean(mbContainer);<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span> String host = servlet.getConfiguration().get("hbase.rest.host", "0.0.0.0");<a name="line.271"></a>
-<span class="sourceLineNo">272</span> int servicePort = servlet.getConfiguration().getInt("hbase.rest.port", 8080);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> HttpConfiguration httpConfig = new HttpConfiguration();<a name="line.273"></a>
-<span class="sourceLineNo">274</span> httpConfig.setSecureScheme("https");<a name="line.274"></a>
-<span class="sourceLineNo">275</span> httpConfig.setSecurePort(servicePort);<a name="line.275"></a>
-<span class="sourceLineNo">276</span> httpConfig.setSendServerVersion(false);<a name="line.276"></a>
-<span class="sourceLineNo">277</span> httpConfig.setSendDateHeader(false);<a name="line.277"></a>
-<span class="sourceLineNo">278</span><a name="line.278"></a>
-<span class="sourceLineNo">279</span> ServerConnector serverConnector;<a name="line.279"></a>
-<span class="sourceLineNo">280</span> if (conf.getBoolean(REST_SSL_ENABLED, false)) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);<a name="line.281"></a>
-<span class="sourceLineNo">282</span> httpsConfig.addCustomizer(new SecureRequestCustomizer());<a name="line.282"></a>
-<span class="sourceLineNo">283</span><a name="line.283"></a>
-<span class="sourceLineNo">284</span> SslContextFactory sslCtxFactory = new SslContextFactory();<a name="line.284"></a>
-<span class="sourceLineNo">285</span> String keystore = conf.get(REST_SSL_KEYSTORE_STORE);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> String password = HBaseConfiguration.getPassword(conf,<a name="line.286"></a>
-<span class="sourceLineNo">287</span> REST_SSL_KEYSTORE_PASSWORD, null);<a name="line.287"></a>
-<span class="sourceLineNo">288</span> String keyPassword = HBaseConfiguration.getPassword(conf,<a name="line.288"></a>
-<span class="sourceLineNo">289</span> REST_SSL_KEYSTORE_KEYPASSWORD, password);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> sslCtxFactory.setKeyStorePath(keystore);<a name="line.290"></a>
-<span class="sourceLineNo">291</span> sslCtxFactory.setKeyStorePassword(password);<a name="line.291"></a>
-<span class="sourceLineNo">292</span> sslCtxFactory.setKeyManagerPassword(keyPassword);<a name="line.292"></a>
-<span class="sourceLineNo">293</span><a name="line.293"></a>
-<span class="sourceLineNo">294</span> String[] excludeCiphers = servlet.getConfiguration().getStrings(<a name="line.294"></a>
-<span class="sourceLineNo">295</span> REST_SSL_EXCLUDE_CIPHER_SUITES, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> if (excludeCiphers.length != 0) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> sslCtxFactory.setExcludeCipherSuites(excludeCiphers);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> }<a name="line.298"></a>
-<span class="sourceLineNo">299</span> String[] includeCiphers = servlet.getConfiguration().getStrings(<a name="line.299"></a>
-<span class="sourceLineNo">300</span> REST_SSL_INCLUDE_CIPHER_SUITES, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> if (includeCiphers.length != 0) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span> sslCtxFactory.setIncludeCipherSuites(includeCiphers);<a name="line.302"></a>
-<span class="sourceLineNo">303</span> }<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span> String[] excludeProtocols = servlet.getConfiguration().getStrings(<a name="line.305"></a>
-<span class="sourceLineNo">306</span> REST_SSL_EXCLUDE_PROTOCOLS, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.306"></a>
-<span class="sourceLineNo">307</span> if (excludeProtocols.length != 0) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span> sslCtxFactory.setExcludeProtocols(excludeProtocols);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> }<a name="line.309"></a>
-<span class="sourceLineNo">310</span> String[] includeProtocols = servlet.getConfiguration().getStrings(<a name="line.310"></a>
-<span class="sourceLineNo">311</span> REST_SSL_INCLUDE_PROTOCOLS, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.311"></a>
-<span class="sourceLineNo">312</span> if (includeProtocols.length != 0) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> sslCtxFactory.setIncludeProtocols(includeProtocols);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> }<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> serverConnector = new ServerConnector(server,<a name="line.316"></a>
-<span class="sourceLineNo">317</span> new SslConnectionFactory(sslCtxFactory, HttpVersion.HTTP_1_1.toString()),<a name="line.317"></a>
-<span class="sourceLineNo">318</span> new HttpConnectionFactory(httpsConfig));<a name="line.318"></a>
-<span class="sourceLineNo">319</span> } else {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> serverConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));<a name="line.320"></a>
-<span class="sourceLineNo">321</span> }<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span> int acceptQueueSize = servlet.getConfiguration().getInt(REST_CONNECTOR_ACCEPT_QUEUE_SIZE, -1);<a name="line.323"></a>
-<span class="sourceLineNo">324</span> if (acceptQueueSize >= 0) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span> serverConnector.setAcceptQueueSize(acceptQueueSize);<a name="line.325"></a>
-<span class="sourceLineNo">326</span> }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span> serverConnector.setPort(servicePort);<a name="line.328"></a>
-<span class="sourceLineNo">329</span> serverConnector.setHost(host);<a name="line.329"></a>
+<span class="sourceLineNo">106</span> @edu.umd.cs.findbugs.annotations.SuppressWarnings(<a name="line.106"></a>
+<span class="sourceLineNo">107</span> value={"ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD", "MS_CANNOT_BE_FINAL"},<a name="line.107"></a>
+<span class="sourceLineNo">108</span> justification="For testing")<a name="line.108"></a>
+<span class="sourceLineNo">109</span> public static Configuration conf = null;<a name="line.109"></a>
+<span class="sourceLineNo">110</span> private final UserProvider userProvider;<a name="line.110"></a>
+<span class="sourceLineNo">111</span> private Server server;<a name="line.111"></a>
+<span class="sourceLineNo">112</span> private InfoServer infoServer;<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span> public RESTServer(Configuration conf) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span> RESTServer.conf = conf;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> this.userProvider = UserProvider.instantiate(conf);<a name="line.116"></a>
+<span class="sourceLineNo">117</span> }<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span> private static void printUsageAndExit(Options options, int exitCode) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> HelpFormatter formatter = new HelpFormatter();<a name="line.120"></a>
+<span class="sourceLineNo">121</span> formatter.printHelp("hbase rest start", "", options,<a name="line.121"></a>
+<span class="sourceLineNo">122</span> "\nTo run the REST server as a daemon, execute " +<a name="line.122"></a>
+<span class="sourceLineNo">123</span> "hbase-daemon.sh start|stop rest [--infoport <port>] [-p <port>] [-ro]\n", true);<a name="line.123"></a>
+<span class="sourceLineNo">124</span> System.exit(exitCode);<a name="line.124"></a>
+<span class="sourceLineNo">125</span> }<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span> void addCSRFFilter(ServletContextHandler ctxHandler, Configuration conf) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span> restCSRFEnabled = conf.getBoolean(REST_CSRF_ENABLED_KEY, REST_CSRF_ENABLED_DEFAULT);<a name="line.128"></a>
+<span class="sourceLineNo">129</span> if (restCSRFEnabled) {<a name="line.129"></a>
+<span class="sourceLineNo">130</span> Map<String, String> restCsrfParams = RestCsrfPreventionFilter<a name="line.130"></a>
+<span class="sourceLineNo">131</span> .getFilterParams(conf, "hbase.rest-csrf.");<a name="line.131"></a>
+<span class="sourceLineNo">132</span> FilterHolder holder = new FilterHolder();<a name="line.132"></a>
+<span class="sourceLineNo">133</span> holder.setName("csrf");<a name="line.133"></a>
+<span class="sourceLineNo">134</span> holder.setClassName(RestCsrfPreventionFilter.class.getName());<a name="line.134"></a>
+<span class="sourceLineNo">135</span> holder.setInitParameters(restCsrfParams);<a name="line.135"></a>
+<span class="sourceLineNo">136</span> ctxHandler.addFilter(holder, PATH_SPEC_ANY, EnumSet.allOf(DispatcherType.class));<a name="line.136"></a>
+<span class="sourceLineNo">137</span> }<a name="line.137"></a>
+<span class="sourceLineNo">138</span> }<a name="line.138"></a>
+<span class="sourceLineNo">139</span><a name="line.139"></a>
+<span class="sourceLineNo">140</span> // login the server principal (if using secure Hadoop)<a name="line.140"></a>
+<span class="sourceLineNo">141</span> private static Pair<FilterHolder, Class<? extends ServletContainer>> loginServerPrincipal(<a name="line.141"></a>
+<span class="sourceLineNo">142</span> UserProvider userProvider, Configuration conf) throws Exception {<a name="line.142"></a>
+<span class="sourceLineNo">143</span> Class<? extends ServletContainer> containerClass = ServletContainer.class;<a name="line.143"></a>
+<span class="sourceLineNo">144</span> if (userProvider.isHadoopSecurityEnabled() && userProvider.isHBaseSecurityEnabled()) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span> String machineName = Strings.domainNamePointerToHostName(<a name="line.145"></a>
+<span class="sourceLineNo">146</span> DNS.getDefaultHost(conf.get(REST_DNS_INTERFACE, "default"),<a name="line.146"></a>
+<span class="sourceLineNo">147</span> conf.get(REST_DNS_NAMESERVER, "default")));<a name="line.147"></a>
+<span class="sourceLineNo">148</span> String keytabFilename = conf.get(REST_KEYTAB_FILE);<a name="line.148"></a>
+<span class="sourceLineNo">149</span> Preconditions.checkArgument(keytabFilename != null && !keytabFilename.isEmpty(),<a name="line.149"></a>
+<span class="sourceLineNo">150</span> REST_KEYTAB_FILE + " should be set if security is enabled");<a name="line.150"></a>
+<span class="sourceLineNo">151</span> String principalConfig = conf.get(REST_KERBEROS_PRINCIPAL);<a name="line.151"></a>
+<span class="sourceLineNo">152</span> Preconditions.checkArgument(principalConfig != null && !principalConfig.isEmpty(),<a name="line.152"></a>
+<span class="sourceLineNo">153</span> REST_KERBEROS_PRINCIPAL + " should be set if security is enabled");<a name="line.153"></a>
+<span class="sourceLineNo">154</span> // Hook for unit tests, this will log out any other user and mess up tests.<a name="line.154"></a>
+<span class="sourceLineNo">155</span> if (!conf.getBoolean(SKIP_LOGIN_KEY, false)) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span> userProvider.login(REST_KEYTAB_FILE, REST_KERBEROS_PRINCIPAL, machineName);<a name="line.156"></a>
+<span class="sourceLineNo">157</span> }<a name="line.157"></a>
+<span class="sourceLineNo">158</span> if (conf.get(REST_AUTHENTICATION_TYPE) != null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span> containerClass = RESTServletContainer.class;<a name="line.159"></a>
+<span class="sourceLineNo">160</span> FilterHolder authFilter = new FilterHolder();<a name="line.160"></a>
+<span class="sourceLineNo">161</span> authFilter.setClassName(AuthFilter.class.getName());<a name="line.161"></a>
+<span class="sourceLineNo">162</span> authFilter.setName("AuthenticationFilter");<a name="line.162"></a>
+<span class="sourceLineNo">163</span> return new Pair<>(authFilter,containerClass);<a name="line.163"></a>
+<span class="sourceLineNo">164</span> }<a name="line.164"></a>
+<span class="sourceLineNo">165</span> }<a name="line.165"></a>
+<span class="sourceLineNo">166</span> return new Pair<>(null, containerClass);<a name="line.166"></a>
+<span class="sourceLineNo">167</span> }<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span> private static void parseCommandLine(String[] args, Configuration conf) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span> Options options = new Options();<a name="line.170"></a>
+<span class="sourceLineNo">171</span> options.addOption("p", "port", true, "Port to bind to [default: " + DEFAULT_LISTEN_PORT + "]");<a name="line.171"></a>
+<span class="sourceLineNo">172</span> options.addOption("ro", "readonly", false, "Respond only to GET HTTP " +<a name="line.172"></a>
+<span class="sourceLineNo">173</span> "method requests [default: false]");<a name="line.173"></a>
+<span class="sourceLineNo">174</span> options.addOption(null, "infoport", true, "Port for web UI");<a name="line.174"></a>
+<span class="sourceLineNo">175</span><a name="line.175"></a>
+<span class="sourceLineNo">176</span> CommandLine commandLine = null;<a name="line.176"></a>
+<span class="sourceLineNo">177</span> try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span> commandLine = new PosixParser().parse(options, args);<a name="line.178"></a>
+<span class="sourceLineNo">179</span> } catch (ParseException e) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span> LOG.error("Could not parse: ", e);<a name="line.180"></a>
+<span class="sourceLineNo">181</span> printUsageAndExit(options, -1);<a name="line.181"></a>
+<span class="sourceLineNo">182</span> }<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span> // check for user-defined port setting, if so override the conf<a name="line.184"></a>
+<span class="sourceLineNo">185</span> if (commandLine != null && commandLine.hasOption("port")) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span> String val = commandLine.getOptionValue("port");<a name="line.186"></a>
+<span class="sourceLineNo">187</span> conf.setInt("hbase.rest.port", Integer.parseInt(val));<a name="line.187"></a>
+<span class="sourceLineNo">188</span> if (LOG.isDebugEnabled()) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span> LOG.debug("port set to " + val);<a name="line.189"></a>
+<span class="sourceLineNo">190</span> }<a name="line.190"></a>
+<span class="sourceLineNo">191</span> }<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span> // check if server should only process GET requests, if so override the conf<a name="line.193"></a>
+<span class="sourceLineNo">194</span> if (commandLine != null && commandLine.hasOption("readonly")) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span> conf.setBoolean("hbase.rest.readonly", true);<a name="line.195"></a>
+<span class="sourceLineNo">196</span> if (LOG.isDebugEnabled()) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span> LOG.debug("readonly set to true");<a name="line.197"></a>
+<span class="sourceLineNo">198</span> }<a name="line.198"></a>
+<span class="sourceLineNo">199</span> }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> // check for user-defined info server port setting, if so override the conf<a name="line.201"></a>
+<span class="sourceLineNo">202</span> if (commandLine != null && commandLine.hasOption("infoport")) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> String val = commandLine.getOptionValue("infoport");<a name="line.203"></a>
+<span class="sourceLineNo">204</span> conf.setInt("hbase.rest.info.port", Integer.parseInt(val));<a name="line.204"></a>
+<span class="sourceLineNo">205</span> if (LOG.isDebugEnabled()) {<a name="line.205"></a>
+<span class="sourceLineNo">206</span> LOG.debug("Web UI port set to " + val);<a name="line.206"></a>
+<span class="sourceLineNo">207</span> }<a name="line.207"></a>
+<span class="sourceLineNo">208</span> }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span> if (commandLine != null && commandLine.hasOption("skipLogin")) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span> conf.setBoolean(SKIP_LOGIN_KEY, true);<a name="line.211"></a>
+<span class="sourceLineNo">212</span> if (LOG.isDebugEnabled()) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span> LOG.debug("Skipping Kerberos login for REST server");<a name="line.213"></a>
+<span class="sourceLineNo">214</span> }<a name="line.214"></a>
+<span class="sourceLineNo">215</span> }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span> List<String> remainingArgs = commandLine != null ? commandLine.getArgList() : new ArrayList<>();<a name="line.217"></a>
+<span class="sourceLineNo">218</span> if (remainingArgs.size() != 1) {<a name="line.218"></a>
+<span class="sourceLineNo">219</span> printUsageAndExit(options, 1);<a name="line.219"></a>
+<span class="sourceLineNo">220</span> }<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span> String command = remainingArgs.get(0);<a name="line.222"></a>
+<span class="sourceLineNo">223</span> if ("start".equals(command)) {<a name="line.223"></a>
+<span class="sourceLineNo">224</span> // continue and start container<a name="line.224"></a>
+<span class="sourceLineNo">225</span> } else if ("stop".equals(command)) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span> System.exit(1);<a name="line.226"></a>
+<span class="sourceLineNo">227</span> } else {<a name="line.227"></a>
+<span class="sourceLineNo">228</span> printUsageAndExit(options, 1);<a name="line.228"></a>
+<span class="sourceLineNo">229</span> }<a name="line.229"></a>
+<span class="sourceLineNo">230</span> }<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span> /**<a name="line.233"></a>
+<span class="sourceLineNo">234</span> * Runs the REST server.<a name="line.234"></a>
+<span class="sourceLineNo">235</span> */<a name="line.235"></a>
+<span class="sourceLineNo">236</span> public synchronized void run() throws Exception {<a name="line.236"></a>
+<span class="sourceLineNo">237</span> Pair<FilterHolder, Class<? extends ServletContainer>> pair = loginServerPrincipal(<a name="line.237"></a>
+<span class="sourceLineNo">238</span> userProvider, conf);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> FilterHolder authFilter = pair.getFirst();<a name="line.239"></a>
+<span class="sourceLineNo">240</span> Class<? extends ServletContainer> containerClass = pair.getSecond();<a name="line.240"></a>
+<span class="sourceLineNo">241</span> RESTServlet servlet = RESTServlet.getInstance(conf, userProvider);<a name="line.241"></a>
+<span class="sourceLineNo">242</span><a name="line.242"></a>
+<span class="sourceLineNo">243</span> // set up the Jersey servlet container for Jetty<a name="line.243"></a>
+<span class="sourceLineNo">244</span> ResourceConfig application = new ResourceConfig().<a name="line.244"></a>
+<span class="sourceLineNo">245</span> packages("org.apache.hadoop.hbase.rest").register(JacksonJaxbJsonProvider.class);<a name="line.245"></a>
+<span class="sourceLineNo">246</span> // Using our custom ServletContainer is tremendously important. This is what makes sure the<a name="line.246"></a>
+<span class="sourceLineNo">247</span> // UGI.doAs() is done for the remoteUser, and calls are not made as the REST server itself.<a name="line.247"></a>
+<span class="sourceLineNo">248</span> ServletContainer servletContainer = ReflectionUtils.newInstance(containerClass, application);<a name="line.248"></a>
+<span class="sourceLineNo">249</span> ServletHolder sh = new ServletHolder(servletContainer);<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span> // Set the default max thread number to 100 to limit<a name="line.251"></a>
+<span class="sourceLineNo">252</span> // the number of concurrent requests so that REST server doesn't OOM easily.<a name="line.252"></a>
+<span class="sourceLineNo">253</span> // Jetty set the default max thread number to 250, if we don't set it.<a name="line.253"></a>
+<span class="sourceLineNo">254</span> //<a name="line.254"></a>
+<span class="sourceLineNo">255</span> // Our default min thread number 2 is the same as that used by Jetty.<a name="line.255"></a>
+<span class="sourceLineNo">256</span> int maxThreads = servlet.getConfiguration().getInt(REST_THREAD_POOL_THREADS_MAX, 100);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> int minThreads = servlet.getConfiguration().getInt(REST_THREAD_POOL_THREADS_MIN, 2);<a name="line.257"></a>
+<span class="sourceLineNo">258</span> // Use the default queue (unbounded with Jetty 9.3) if the queue size is negative, otherwise use<a name="line.258"></a>
+<span class="sourceLineNo">259</span> // bounded {@link ArrayBlockingQueue} with the given size<a name="line.259"></a>
+<span class="sourceLineNo">260</span> int queueSize = servlet.getConfiguration().getInt(REST_THREAD_POOL_TASK_QUEUE_SIZE, -1);<a name="line.260"></a>
+<span class="sourceLineNo">261</span> int idleTimeout = servlet.getConfiguration().getInt(REST_THREAD_POOL_THREAD_IDLE_TIMEOUT, 60000);<a name="line.261"></a>
+<span class="sourceLineNo">262</span> QueuedThreadPool threadPool = queueSize > 0 ?<a name="line.262"></a>
+<span class="sourceLineNo">263</span> new QueuedThreadPool(maxThreads, minThreads, idleTimeout, new ArrayBlockingQueue<>(queueSize)) :<a name="line.263"></a>
+<span class="sourceLineNo">264</span> new QueuedThreadPool(maxThreads, minThreads, idleTimeout);<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> this.server = new Server(threadPool);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span> // Setup JMX<a name="line.268"></a>
+<span class="sourceLineNo">269</span> MBeanContainer mbContainer=new MBeanContainer(ManagementFactory.getPlatformMBeanServer());<a name="line.269"></a>
+<span class="sourceLineNo">270</span> server.addEventListener(mbContainer);<a name="line.270"></a>
+<span class="sourceLineNo">271</span> server.addBean(mbContainer);<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span><a name="line.273"></a>
+<span class="sourceLineNo">274</span> String host = servlet.getConfiguration().get("hbase.rest.host", "0.0.0.0");<a name="line.274"></a>
+<span class="sourceLineNo">275</span> int servicePort = servlet.getConfiguration().getInt("hbase.rest.port", 8080);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> HttpConfiguration httpConfig = new HttpConfiguration();<a name="line.276"></a>
+<span class="sourceLineNo">277</span> httpConfig.setSecureScheme("https");<a name="line.277"></a>
+<span class="sourceLineNo">278</span> httpConfig.setSecurePort(servicePort);<a name="line.278"></a>
+<span class="sourceLineNo">279</span> httpConfig.setSendServerVersion(false);<a name="line.279"></a>
+<span class="sourceLineNo">280</span> httpConfig.setSendDateHeader(false);<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span> ServerConnector serverConnector;<a name="line.282"></a>
+<span class="sourceLineNo">283</span> if (conf.getBoolean(REST_SSL_ENABLED, false)) {<a name="line.283"></a>
+<span class="sourceLineNo">284</span> HttpConfiguration httpsConfig = new HttpConfiguration(httpConfig);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> httpsConfig.addCustomizer(new SecureRequestCustomizer());<a name="line.285"></a>
+<span class="sourceLineNo">286</span><a name="line.286"></a>
+<span class="sourceLineNo">287</span> SslContextFactory sslCtxFactory = new SslContextFactory();<a name="line.287"></a>
+<span class="sourceLineNo">288</span> String keystore = conf.get(REST_SSL_KEYSTORE_STORE);<a name="line.288"></a>
+<span class="sourceLineNo">289</span> String password = HBaseConfiguration.getPassword(conf,<a name="line.289"></a>
+<span class="sourceLineNo">290</span> REST_SSL_KEYSTORE_PASSWORD, null);<a name="line.290"></a>
+<span class="sourceLineNo">291</span> String keyPassword = HBaseConfiguration.getPassword(conf,<a name="line.291"></a>
+<span class="sourceLineNo">292</span> REST_SSL_KEYSTORE_KEYPASSWORD, password);<a name="line.292"></a>
+<span class="sourceLineNo">293</span> sslCtxFactory.setKeyStorePath(keystore);<a name="line.293"></a>
+<span class="sourceLineNo">294</span> sslCtxFactory.setKeyStorePassword(password);<a name="line.294"></a>
+<span class="sourceLineNo">295</span> sslCtxFactory.setKeyManagerPassword(keyPassword);<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span> String[] excludeCiphers = servlet.getConfiguration().getStrings(<a name="line.297"></a>
+<span class="sourceLineNo">298</span> REST_SSL_EXCLUDE_CIPHER_SUITES, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.298"></a>
+<span class="sourceLineNo">299</span> if (excludeCiphers.length != 0) {<a name="line.299"></a>
+<span class="sourceLineNo">300</span> sslCtxFactory.setExcludeCipherSuites(excludeCiphers);<a name="line.300"></a>
+<span class="sourceLineNo">301</span> }<a name="line.301"></a>
+<span class="sourceLineNo">302</span> String[] includeCiphers = servlet.getConfiguration().getStrings(<a name="line.302"></a>
+<span class="sourceLineNo">303</span> REST_SSL_INCLUDE_CIPHER_SUITES, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.303"></a>
+<span class="sourceLineNo">304</span> if (includeCiphers.length != 0) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span> sslCtxFactory.setIncludeCipherSuites(includeCiphers);<a name="line.305"></a>
+<span class="sourceLineNo">306</span> }<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span> String[] excludeProtocols = servlet.getConfiguration().getStrings(<a name="line.308"></a>
+<span class="sourceLineNo">309</span> REST_SSL_EXCLUDE_PROTOCOLS, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.309"></a>
+<span class="sourceLineNo">310</span> if (excludeProtocols.length != 0) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span> sslCtxFactory.setExcludeProtocols(excludeProtocols);<a name="line.311"></a>
+<span class="sourceLineNo">312</span> }<a name="line.312"></a>
+<span class="sourceLineNo">313</span> String[] includeProtocols = servlet.getConfiguration().getStrings(<a name="line.313"></a>
+<span class="sourceLineNo">314</span> REST_SSL_INCLUDE_PROTOCOLS, ArrayUtils.EMPTY_STRING_ARRAY);<a name="line.314"></a>
+<span class="sourceLineNo">315</span> if (includeProtocols.length != 0) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> sslCtxFactory.setIncludeProtocols(includeProtocols);<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> serverConnector = new ServerConnector(server,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> new SslConnectionFactory(sslCtxFactory, HttpVersion.HTTP_1_1.toString()),<a name="line.320"></a>
+<span class="sourceLineNo">321</span> new HttpConnectionFactory(httpsConfig));<a name="line.321"></a>
+<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
+<span class="sourceLineNo">323</span> serverConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfig));<a name="line.323"></a>
+<span class="sourceLineNo">324</span> }<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> int acceptQueueSize = servlet.getConfiguration().getInt(REST_CONNECTOR_ACCEPT_QUEUE_SIZE, -1);<a name="line.326"></a>
+<span class="sourceLineNo">327</span> if (acceptQueueSize >= 0) {<a name="line.327"></a>
+<span class="sourceLineNo">328</span> serverConnector.setAcceptQueueSize(acceptQueueSize);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span> server.addConnector(serverConnector);<a name="line.331"></a>
-<span class="sourceLineNo">332</span> server.setStopAtShutdown(true);<a name="line.332"></a>
+<span class="sourceLineNo">331</span> serverConnector.setPort(servicePort);<a name="line.331"></a>
+<span class="sourceLineNo">332</span> serverConnector.setHost(host);<a name="line.332"></a>
<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> // set up context<a name="line.334"></a>
-<span class="sourceLineNo">335</span> ServletContextHandler ctxHandler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> ctxHandler.addServlet(sh, PATH_SPEC_ANY);<a name="line.336"></a>
-<span class="sourceLineNo">337</span> if (authFilter != null) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span> ctxHandler.addFilter(authFilter, PATH_SPEC_ANY, EnumSet.of(DispatcherType.REQUEST));<a name="line.338"></a>
-<span class="sourceLineNo">339</span> }<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span> // Load filters from configuration.<a name="line.341"></a>
-<span class="sourceLineNo">342</span> String[] filterClasses = servlet.getConfiguration().getStrings(FILTER_CLASSES,<a name="line.342"></a>
-<span class="sourceLineNo">343</span> GzipFilter.class.getName());<a name="line.343"></a>
-<span class="sourceLineNo">344</span> for (String filter : filterClasses) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span> filter = filter.trim();<a name="line.345"></a>
-<span class="sourceLineNo">346</span> ctxHandler.addFilter(filter, PATH_SPEC_ANY, EnumSet.of(DispatcherType.REQUEST));<a name="line.346"></a>
-<span class="sourceLineNo">347</span> }<a name="line.347"></a>
-<span class="sourceLineNo">348</span> addCSRFFilter(ctxHandler, conf);<a name="line.348"></a>
-<span class="sourceLineNo">349</span> HttpServerUtil.constrainHttpMethods(ctxHandler, servlet.getConfiguration()<a name="line.349"></a>
-<span class="sourceLineNo">350</span> .getBoolean(REST_HTTP_ALLOW_OPTIONS_METHOD, REST_HTTP_ALLOW_OPTIONS_METHOD_DEFAULT));<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span> // Put up info server.<a name="line.352"></a>
-<span class="sourceLineNo">353</span> int port = conf.getInt("hbase.rest.info.port", 8085);<a name="line.353"></a>
-<span class="sourceLineNo">354</span> if (port >= 0) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span> conf.setLong("startcode", System.currentTimeMillis());<a name="line.355"></a>
-<span class="sourceLineNo">356</span> String a = conf.get("hbase.rest.info.bindAddress", "0.0.0.0");<a name="line.356"></a>
-<span class="sourceLineNo">357</span> this.infoServer = new InfoServer("rest", a, port, false, conf);<a name="line.357"></a>
-<span class="sourceLineNo">358</span> this.infoServer.setAttribute("hbase.conf", conf);<a name="line.358"></a>
-<span class="sourceLineNo">359</span> this.infoServer.start();<a name="line.359"></a>
-<span class="sourceLineNo">360</span> }<a name="line.360"></a>
-<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
-<span class="sourceLineNo">362</span> // start server<a name="line.362"></a>
-<span class="sourceLineNo">363</span> server.start();<a name="line.363"></a>
-<span class="sourceLineNo">364</span> } catch (Exception e) {<a name="line.364"></a>
-<span class="sourceLineNo">365</span> LOG.error(HBaseMarkers.FATAL, "Failed to start server", e);<a name="line.365"></a>
-<span class="sourceLineNo">366</span> throw e;<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span> public synchronized void join() throws Exception {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> if (server == null) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span> throw new IllegalStateException("Server is not running");<a name="line.372"></a>
-<span class="sourceLineNo">373</span> }<a name="line.373"></a>
-<span class="sourceLineNo">374</span> server.join();<a name="line.374"></a>
-<span class="sourceLineNo">375</span> }<a name="line.375"></a>
-<span class="sourceLineNo">376</span><a name="line.376"></a>
-<span class="sourceLineNo">377</span> public synchronized void stop() throws Exception {<a name="line.377"></a>
-<span class="sourceLineNo">378</span> if (server == null) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span> throw new IllegalStateException("Server is not running");<a name="line.379"></a>
-<span class="sourceLineNo">380</span> }<a name="line.380"></a>
-<span class="sourceLineNo">381</span> server.stop();<a name="line.381"></a>
-<span class="sourceLineNo">382</span> server = null;<a name="line.382"></a>
-<span class="sourceLineNo">383</span> RESTServlet.stop();<a name="line.383"></a>
-<span class="sourceLineNo">384</span> }<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span> public synchronized int getPort() {<a name="line.386"></a>
-<span class="sourceLineNo">387</span> if (server == null) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span> throw new IllegalStateException("Server is not running");<a name="line.388"></a>
-<span class="sourceLineNo">389</span> }<a name="line.389"></a>
-<span class="sourceLineNo">390</span> return ((ServerConnector) server.getConnectors()[0]).getLocalPort();<a name="line.390"></a>
-<span class="sourceLineNo">391</span> }<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span> @SuppressWarnings("deprecation")<a name="line.393"></a>
-<span class="sourceLineNo">394</span> public synchronized int getInfoPort() {<a name="line.394"></a>
-<span class="sourceLineNo">395</span> if (infoServer == null) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span> throw new IllegalStateException("InfoServer is not running");<a name="line.396"></a>
-<span class="sourceLineNo">397</span> }<a name="line.397"></a>
-<span class="sourceLineNo">398</span> return infoServer.getPort();<a name="line.398"></a>
-<span class="sourceLineNo">399</span> }<a name="line.399"></a>
-<span class="sourceLineNo">400</span><a name="line.400"></a>
-<span class="sourceLineNo">401</span> public Configuration getConf() {<a name="line.401"></a>
-<span class="sourceLineNo">402</span> return conf;<a name="line.402"></a>
-<span class="sourceLineNo">403</span> }<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span> /**<a name="line.405"></a>
-<span class="sourceLineNo">406</span> * The main method for the HBase rest server.<a name="line.406"></a>
-<span class="sourceLineNo">407</span> * @param args command-line arguments<a name="line.407"></a>
-<span class="sourceLineNo">408</span> * @throws Exception exception<a name="line.408"></a>
-<span class="sourceLineNo">409</span> */<a name="line.409"></a>
-<span class="sourceLineNo">410</span> public static void main(String[] args) throws Exception {<a name="line.410"></a>
-<span class="sourceLineNo">411</span> LOG.info("***** STARTING service '" + RESTServer.class.getSimpleName() + "' *****");<a name="line.411"></a>
-<span class="sourceLineNo">412</span> VersionInfo.logVersion();<a name="line.412"></a>
-<span class="sourceLineNo">413</span> final Configuration conf = HBaseConfiguration.create();<a name="line.413"></a>
-<span class="sourceLineNo">414</span> parseCommandLine(args, conf);<a name="line.414"></a>
-<span class="sourceLineNo">415</span> RESTServer server = new RESTServer(conf);<a name="line.415"></a>
-<span class="sourceLineNo">416</span><a name="line.416"></a>
-<span class="sourceLineNo">417</span> try {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> server.run();<a name="line.418"></a>
-<span class="sourceLineNo">419</span> server.join();<a name="line.419"></a>
-<span class="sourceLineNo">420</span> } catch (Exception e) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span> System.exit(1);<a name="line.421"></a>
-<span class="sourceLineNo">422</span> }<a name="line.422"></a>
-<span class="sourceLineNo">423</span><a name="line.423"></a>
-<span class="sourceLineNo">424</span> LOG.info("***** STOPPING service '" + RESTServer.class.getSimpleName() + "' *****");<a name="line.424"></a>
-<span class="sourceLineNo">425</span> }<a name="line.425"></a>
-<span class="sourceLineNo">426</span>}<a name="line.426"></a>
+<span class="sourceLineNo">334</span> server.addConnector(serverConnector);<a name="line.334"></a>
+<span class="sourceLineNo">335</span> server.setStopAtShutdown(true);<a name="line.335"></a>
+<span class="sourceLineNo">336</span><a name="line.336"></a>
+<span class="sourceLineNo">337</span> // set up context<a name="line.337"></a>
+<span class="sourceLineNo">338</span> ServletContextHandler ctxHandler = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> ctxHandler.addServlet(sh, PATH_SPEC_ANY);<a name="line.339"></a>
+<span class="sourceLineNo">340</span> if (authFilter != null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span> ctxHandler.addFilter(authFilter, PATH_SPEC_ANY, EnumSet.of(DispatcherType.REQUEST));<a name="line.341"></a>
+<span class="sourceLineNo">342</span> }<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> // Load filters from configuration.<a name="line.344"></a>
+<span class="sourceLineNo">345</span> String[] filterClasses = servlet.getConfiguration().getStrings(FILTER_CLASSES,<a name="line.345"></a>
+<span class="sourceLineNo">346</span> GzipFilter.class.getName());<a name="line.346"></a>
+<span class="sourceLineNo">347</span> for (String filter : filterClasses) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> filter = filter.trim();<a name="line.348"></a>
+<span class="sourceLineNo">349</span> ctxHandler.addFilter(filter, PATH_SPEC_ANY, EnumSet.of(DispatcherType.REQUEST));<a name="line.349"></a>
+<span class="sourceLineNo">350</span> }<a name="line.350"></a>
+<span class="sourceLineNo">351</span> addCSRFFilter(ctxHandler, conf);<a name="line.351"></a>
+<span class="sourceLineNo">352</span> HttpServerUtil.constrainHttpMethods(ctxHandler, servlet.getConfiguration()<a name="line.352"></a>
+<span class="sourceLineNo">353</span> .getBoolean(REST_HTTP_ALLOW_OPTIONS_METHOD, REST_HTTP_ALLOW_OPTIONS_METHOD_DEFAULT));<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span> // Put up info server.<a name="line.355"></a>
+<span class="sourceLineNo">356</span> int port = conf.getInt("hbase.rest.info.port", 8085);<a name="line.356"></a>
+<span class="sourceLineNo">357</span> if (port >= 0) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span> conf.setLong("startcode", System.currentTimeMillis());<a name="line.358"></a>
+<span class="sourceLineNo">359</span> String a = conf.get("hbase.rest.info.bindAddress", "0.0.0.0");<a name="line.359"></a>
+<span class="sourceLineNo">360</span> this.infoServer = new InfoServer("rest", a, port, false, conf);<a name="line.360"></a>
+<span class="sourceLineNo">361</span> this.infoServer.setAttribute("hbase.conf", conf);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> this.infoServer.start();<a name="line.362"></a>
+<span class="sourceLineNo">363</span> }<a name="line.363"></a>
+<span class="sourceLineNo">364</span> try {<a name="line.364"></a>
+<span class="sourceLineNo">365</span> // start server<a name="line.365"></a>
+<span class="sourceLineNo">366</span> server.start();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> } catch (Exception e) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span> LOG.error(HBaseMarkers.FATAL, "Failed to start server", e);<a name="line.368"></a>
+<span class="sourceLineNo">369</span> throw e;<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><a name="line.372"></a>
+<span class="sourceLineNo">373</span> public synchronized void join() throws Exception {<a name="line.373"></a>
+<span class="sourceLineNo">374</span> if (server == null) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span> throw new IllegalStateException("Server is not running");<a name="line.375"></a>
+<span class="sourceLineNo">376</span> }<a name="line.376"></a>
+<span class="sourceLineNo">377</span> server.join();<a name="line.377"></a>
+<span class="sourceLineNo">378</span> }<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span> public synchronized void stop() throws Exception {<a name="line.380"></a>
+<span class="sourceLineNo">381</span> if (server == null) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span> throw new IllegalStateException("Server is not running");<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span> server.stop();<a name="line.384"></a>
+<span class="sourceLineNo">385</span> server = null;<a name="line.385"></a>
+<span class="sourceLineNo">386</span> RESTServlet.stop();<a name="line.386"></a>
+<span class="sourceLineNo">387</span> }<a name="line.387"></a>
+<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">389</span> public synchronized int getPort() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span> if (server == null) {<a name="line.390"></a>
+<span class="sourceLineNo">391</span> throw new IllegalStateException("Server is not running");<a name="line.391"></a>
+<span class="sourceLineNo">392</span> }<a name="line.392"></a>
+<span class="sourceLineNo">393</span> return ((ServerConnector) server.getConnectors()[0]).getLocalPort();<a name="line.393"></a>
+<span class="sourceLineNo">394</span> }<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span> @SuppressWarnings("deprecation")<a name="line.396"></a>
+<span class="sourceLineNo">397</span> public synchronized int getInfoPort() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span> if (infoServer == null) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span> throw new IllegalStateException("InfoServer is not running");<a name="line.399"></a>
+<span class="sourceLineNo">400</span> }<a name="line.400"></a>
+<span class="sourceLineNo">401</span> return infoServer.getPort();<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> public Configuration getConf() {<a name="line.404"></a>
+<span class="sourceLineNo">405</span> return conf;<a name="line.405"></a>
+<span class="sourceLineNo">406</span> }<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> /**<a name="line.408"></a>
+<span class="sourceLineNo">409</span> * The main method for the HBase rest server.<a name="line.409"></a>
+<span class="sourceLineNo">410</span> * @param args command-line arguments<a name="line.410"></a>
+<span class="sourceLineNo">411</span> * @throws Exception exception<a name="line.411"></a>
+<span class="sourceLineNo">412</span> */<a name="line.412"></a>
+<span class="sourceLineNo">413</span> public static void main(String[] args) throws Exception {<a name="line.413"></a>
+<span class="sourceLineNo">414</span> LOG.info("***** STARTING service '" + RESTServer.class.getSimpleName() + "' *****");<a name="line.414"></a>
+<span class="sourceLineNo">415</span> VersionInfo.logVersion();<a name="line.415"></a>
+<span class="sourceLineNo">416</span> final Configuration conf = HBaseConfiguration.create();<a name="line.416"></a>
+<span class="sourceLineNo">417</span> parseCommandLine(args, conf);<a name="line.417"></a>
+<span class="sourceLineNo">418</span> RESTServer server = new RESTServer(conf);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span> try {<a name="line.420"></a>
+<span class="sourceLineNo">421</span> server.run();<a name="line.421"></a>
+<span class="sourceLineNo">422</span> server.join();<a name="line.422"></a>
+<span class="sourceLineNo">423</span> } catch (Exception e) {<a name="line.423"></a>
+<span class="sourceLineNo">424</span> System.exit(1);<a name="line.424"></a>
+<span class="sourceLineNo">425</span> }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span> LOG.info("***** STOPPING service '" + RESTServer.class.getSimpleName() + "' *****");<a name="line.427"></a>
+<span class="sourceLineNo">428</span> }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>}<a name="line.429"></a>
diff --git a/downloads.html b/downloads.html
index 9bcd6f4..8139d33 100644
--- a/downloads.html
+++ b/downloads.html
@@ -335,7 +335,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 7b35498..afcf6f8 100644
--- a/export_control.html
+++ b/export_control.html
@@ -187,7 +187,7 @@ for more details.</p>
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 a080aea..d04ad74 100644
--- a/index.html
+++ b/index.html
@@ -267,7 +267,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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-management.html b/issue-management.html
index 0ba5010..0434e27 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -159,7 +159,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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/licenses.html b/licenses.html
index 71fc36e..6a88b40 100644
--- a/licenses.html
+++ b/licenses.html
@@ -362,7 +362,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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/mailing-lists.html b/mailing-lists.html
index 0570de4..fd694a6 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -212,7 +212,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 c8bf68a..d384c09 100644
--- a/metrics.html
+++ b/metrics.html
@@ -315,7 +315,7 @@ export HBASE_REGIONSERVER_OPTS="$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 612860b..4b181e0 100644
--- a/old_news.html
+++ b/old_news.html
@@ -296,7 +296,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 8da6be5..06ca0b9 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -319,7 +319,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 25edf37..6e50709 100644
--- a/plugins.html
+++ b/plugins.html
@@ -238,7 +238,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 598a01a..3b6b693 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -625,7 +625,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 28db5e5..5d36ab7 100644
--- a/project-info.html
+++ b/project-info.html
@@ -203,7 +203,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 4c7f489..d18b8c5 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -176,7 +176,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 9822a4b..6c857fe 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -164,7 +164,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 6c1549d..617b2d1 100644
--- a/replication.html
+++ b/replication.html
@@ -159,7 +159,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 48fa2ff..9e8f868 100644
--- a/resources.html
+++ b/resources.html
@@ -187,7 +187,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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/scm.html b/scm.html
index cdabe5a..981e6cd 100644
--- a/scm.html
+++ b/scm.html
@@ -170,7 +170,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 0affd78..827dd31 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -189,7 +189,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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/summary.html b/summary.html
index 9c27138..4039d01 100644
--- a/summary.html
+++ b/summary.html
@@ -202,7 +202,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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 a1a6502..8f0e169 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -376,7 +376,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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.html b/team.html
index 5b45747..576297e 100644
--- a/team.html
+++ b/team.html
@@ -643,7 +643,7 @@
<div class="row">
<p>Copyright ©2007–2019
<a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-05</li>
+All rights reserved. <li id="publishDate" class="pull-right">Last Published: 2019-03-06</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/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 881878d..dc7f78f 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -21358,6 +21358,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html#htable2">htable2</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationWithTags</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#htable3">htable3</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html#hTableInterface">hTableInterface</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestIncrementTimeRange.html" title="class in org.apache.hadoop.hbase.coprocessor">TestIncrementTimeRange</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.html#htbl">htbl</a></span> - Variable in class org.apache.hadoop.hbase.util.hbck.<a href="org/apache/hadoop/hbase/util/hbck/OfflineMetaRebuildTestCore.html" title="class in org.apache.hadoop.hbase.util.hbck">OfflineMetaRebuildTestCore</a></dt>
@@ -24202,6 +24204,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData(String, byte[])</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-byte:A-">loadData(String, byte[], byte[])</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.html#loadData-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-int-byte:A...-">loadData(HBaseTestingUtility, TableName, int, byte[]...)</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.html#loadData-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.client.BufferedMutator-int-byte:A...-">loadData(HBaseTestingUtility, BufferedMutator, int, byte[]...)</a></span> - Static method in class org.apache.hadoop.hbase.snapshot.<a href="org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.html" title="class in org.apache.hadoop.hbase.snapshot">SnapshotTestingUtils</a></dt>
@@ -30716,6 +30720,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html#peerId">peerId</a></span> - Variable in class org.apache.hadoop.hbase.master.procedure.<a href="org/apache/hadoop/hbase/master/procedure/TestMasterProcedureScheduler.TestPeerProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">TestMasterProcedureScheduler.TestPeerProcedure</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#peerTableName">peerTableName</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.PeInputFormat.html#PeInputFormat--">PeInputFormat()</a></span> - Constructor for class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.PeInputFormat.html" title="class in org.apache.hadoop.hbase.rest">PerformanceEvaluation.PeInputFormat</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.PeInputSplit.html#PeInputSplit--">PeInputSplit()</a></span> - Constructor for class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/PerformanceEvaluation.PeInputSplit.html" title="class in org.apache.hadoop.hbase.rest">PerformanceEvaluation.PeInputSplit</a></dt>
@@ -36791,6 +36797,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/TestBackupRepair.html#runBackupAndFailAtStageWithRestore-int-">runBackupAndFailAtStageWithRestore(int)</a></span> - Method in class org.apache.hadoop.hbase.backup.<a href="org/apache/hadoop/hbase/backup/TestBackupRepair.html" title="class in org.apache.hadoop.hbase.backup">TestBackupRepair</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#runBatchCopyTest--">runBatchCopyTest()</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HFilePerformanceEvaluation.html#runBenchmark-org.apache.hadoop.hbase.HFilePerformanceEvaluation.RowOrientedBenchmark-int-java.lang.String-java.lang.String-">runBenchmark(HFilePerformanceEvaluation.RowOrientedBenchmark, int, String, String)</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HFilePerformanceEvaluation.html" title="class in org.apache.hadoop.hbase">HFilePerformanceEvaluation [...]
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html#runBenchmark-java.lang.Runnable:A-int-">runBenchmark(Runnable[], int)</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.wal">WALPerformanceEvaluation</a></dt>
@@ -39957,6 +39965,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationWithTags</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplicationCrossDiffHdfs.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplicationCrossDiffHdfs.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplicationCrossDiffHdfs</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/client/TestRemoteTable.html#setUpBeforeClass--">setUpBeforeClass()</a></span> - Static method in class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/TestRemoteTable.html" title="class in org.apache.hadoop.hbase.rest.client">TestRemoteTable</a></dt>
@@ -45264,6 +45274,8 @@
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestReplicationWithTags.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationWithTags</a></dt>
<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/client/TestRemoteHTableRetries.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Method in class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/TestRemoteHTableRetries.html" title="class in org.apache.hadoop.hbase.rest.client">TestRemoteHTableRetries</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/client/TestRemoteTable.html#tearDownAfterClass--">tearDownAfterClass()</a></span> - Static method in class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/TestRemoteTable.html" title="class in org.apache.hadoop.hbase.rest.client">TestRemoteTable</a></dt>
@@ -68066,6 +68078,10 @@
<div class="block">Do a small loading into a table, make sure the data is really the same, then run the
VerifyReplication job to check the results.</div>
</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithPeerTableName--">testVerifyRepJobWithPeerTableName()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
+<dd> </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithPeerTableNameAndSnapshotSupport--">testVerifyRepJobWithPeerTableNameAndSnapshotSupport()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
+<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithQuorumAddress--">testVerifyRepJobWithQuorumAddress()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
<dd> </dd>
<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithQuorumAddressAndSnapshotSupport--">testVerifyRepJobWithQuorumAddressAndSnapshotSupport()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestVerifyReplication.html" title="class in org.apache.hadoop.hbase.replication">TestVerifyReplication</a></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/TestHBaseTestingUtility.html b/testdevapidocs/org/apache/hadoop/hbase/TestHBaseTestingUtility.html
index ee6f8a0..22ef93a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/TestHBaseTestingUtility.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/TestHBaseTestingUtility.html
@@ -484,7 +484,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testMiniDFSCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.370">testMiniDFSCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.372">testMiniDFSCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -498,7 +498,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testSetupClusterTestBuildDir</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.383">testSetupClusterTestBuildDir</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.385">testSetupClusterTestBuildDir</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -512,7 +512,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testTestDir</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.398">testTestDir</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.400">testTestDir</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -526,7 +526,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testResolvePortConflict</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.408">testResolvePortConflict</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.410">testResolvePortConflict</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -540,7 +540,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>testOverridingOfDefaultPorts</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.438">testOverridingOfDefaultPorts</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.440">testOverridingOfDefaultPorts</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -554,7 +554,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>testKillMiniHBaseCluster</h4>
-<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.477">testKillMiniHBaseCluster</a>()
+<pre>public void <a href="../../../../src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html#line.479">testKillMiniHBaseCluster</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index b726ce9..7e63870 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -146,8 +146,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
</ul>
</li>
</ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html b/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html
index ea0f34d..2f69a7f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/replication/TestReplicationAdminWithClusters.html
@@ -283,7 +283,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index f9b0ab1..95e74d8 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -158,8 +158,8 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TagUsage.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TagUsage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">TestCacheOnWrite.CacheOnWriteType</span></a></li>
</ul>
</li>
</ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index c403d2b..5a01ac3 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -580,14 +580,14 @@
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
</ul>
</li>
</ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 3adc0f1..f9d55c2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -241,10 +241,10 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
</ul>
</li>
</ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index d10429b..c83dbfb 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -702,11 +702,11 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
</ul>
</li>
</ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestNamespaceReplication.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestNamespaceReplication.html
index 2fc74f0..5781c60 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestNamespaceReplication.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestNamespaceReplication.html
@@ -279,7 +279,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html
index e66c34d..d7423ae 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationBase.html
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":9,"i5":10,"i6":9,"i7":9,"i8":10,"i9":9,"i10":9,"i11":9,"i12":10,"i13":9};
+var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":9,"i5":9,"i6":10,"i7":9,"i8":9,"i9":10,"i10":9,"i11":9,"i12":9,"i13":10,"i14":9};
var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -279,38 +279,44 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
byte[] row)</code> </td>
</tr>
<tr id="i5" class="rowColor">
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-byte:A-">loadData</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> prefix,
+ byte[] row,
+ byte[] familyName)</code> </td>
+</tr>
+<tr id="i6" class="altColor">
<td class="colFirst"><code>private boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#peerExist-java.lang.String-">peerExist</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)</code> </td>
</tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
<td class="colFirst"><code>protected static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#runSimplePutDeleteTest--">runSimplePutDeleteTest</a></span>()</code> </td>
</tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
<td class="colFirst"><code>protected static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#runSmallBatchTest--">runSmallBatchTest</a></span>()</code> </td>
</tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#setUpBase--">setUpBase</a></span>()</code> </td>
</tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code> </td>
</tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
<td class="colFirst"><code>protected static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#startClusters--">startClusters</a></span>()</code> </td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
<td class="colFirst"><code>static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code> </td>
</tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#tearDownBase--">tearDownBase</a></span>()</code> </td>
</tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
<td class="colFirst"><code>protected static void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#waitForReplication-int-int-">waitForReplication</a></span>(int expectedRows,
int retries)</code> </td>
@@ -646,13 +652,29 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</dl>
</li>
</ul>
+<a name="loadData-java.lang.String-byte:A-byte:A-">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>loadData</h4>
+<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.170">loadData</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> prefix,
+ byte[] row,
+ byte[] familyName)
+ 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>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
<a name="configureClusters--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>configureClusters</h4>
-<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.176">configureClusters</a>()</pre>
+<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.180">configureClusters</a>()</pre>
</li>
</ul>
<a name="startClusters--">
@@ -661,7 +683,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>startClusters</h4>
-<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.208">startClusters</a>()
+<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.212">startClusters</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -675,7 +697,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setUpBeforeClass</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.253">setUpBeforeClass</a>()
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.257">setUpBeforeClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -689,7 +711,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>peerExist</h4>
-<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.258">peerExist</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
+<pre>private boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.262">peerExist</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> peerId)
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>
@@ -703,7 +725,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>setUpBase</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.263">setUpBase</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.267">setUpBase</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -717,7 +739,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>tearDownBase</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.282">tearDownBase</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.286">tearDownBase</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -731,7 +753,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>runSimplePutDeleteTest</h4>
-<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.288">runSimplePutDeleteTest</a>()
+<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.292">runSimplePutDeleteTest</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<dl>
@@ -747,7 +769,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>runSmallBatchTest</h4>
-<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.328">runSmallBatchTest</a>()
+<pre>protected static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.332">runSmallBatchTest</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
<dl>
@@ -763,7 +785,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>tearDownAfterClass</h4>
-<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.343">tearDownAfterClass</a>()
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html#line.347">tearDownAfterClass</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationChangingPeerRegionservers.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationChangingPeerRegionservers.html
index d8341ba..88a886b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationChangingPeerRegionservers.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationChangingPeerRegionservers.html
@@ -220,7 +220,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#runSimplePutDeleteTest--">run [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byt [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDisableInactivePeer.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDisableInactivePeer.html
index 37e9e73..fe3904b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDisableInactivePeer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDisableInactivePeer.html
@@ -193,7 +193,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDroppedTables.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDroppedTables.html
index 07c5473..f8d5a2e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDroppedTables.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationDroppedTables.html
@@ -232,7 +232,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEmptyWALRecovery.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEmptyWALRecovery.html
index 9d76519..69755c0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEmptyWALRecovery.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEmptyWALRecovery.html
@@ -197,7 +197,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
index 5f65c47..41729f9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationEndpoint.html
@@ -288,7 +288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRS.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRS.html
index 7353f90..33692ee 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRS.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRS.html
@@ -205,7 +205,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.html
index 8e8677b..34c9112 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.html
@@ -217,7 +217,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSWithSeparateOldWALs.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSWithSeparateOldWALs.html
index 87bbe36..7d7bc22 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSWithSeparateOldWALs.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSWithSeparateOldWALs.html
@@ -203,7 +203,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillRS.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillRS.html
index 9ce5b00..829b761 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillRS.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillRS.html
@@ -203,7 +203,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRS.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRS.html
index c81cbc0..7137e57 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRS.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRS.html
@@ -201,7 +201,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRSWithSeparateOldWALs.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRSWithSeparateOldWALs.html
index a3a3df7..a8b3346 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRSWithSeparateOldWALs.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationKillSlaveRSWithSeparateOldWALs.html
@@ -203,7 +203,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationMetricsforUI.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationMetricsforUI.html
index fbcdc29..d0c8b9f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationMetricsforUI.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationMetricsforUI.html
@@ -191,7 +191,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.html
index cea4d96..cbaf508 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.html
@@ -261,7 +261,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTestsSync.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTestsSync.html
index 7e49fd1..05bfc5b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTestsSync.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSmallTestsSync.html
@@ -206,7 +206,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#runSimplePutDeleteTest--">run [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byte:A-">loadData</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#loadData-java.lang.String-byt [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStatus.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStatus.html
index e84b038..124a09c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStatus.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationStatus.html
@@ -238,7 +238,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpTool.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpTool.html
index 2f5b86c..a195ee2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpTool.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpTool.html
@@ -279,7 +279,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpToolWithBulkLoadedData.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpToolWithBulkLoadedData.html
index 670607b..1910ff0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpToolWithBulkLoadedData.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestReplicationSyncUpToolWithBulkLoadedData.html
@@ -242,7 +242,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/TestVerifyReplication.html b/testdevapidocs/org/apache/hadoop/hbase/replication/TestVerifyReplication.html
index 92f01a7..58f1078 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/TestVerifyReplication.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/TestVerifyReplication.html
@@ -18,8 +18,8 @@
catch(err) {
}
//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":9,"i2":10,"i3":10,"i4":9,"i5":9,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<hr>
<br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.72">TestVerifyReplication</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.77">TestVerifyReplication</a>
extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></pre>
</li>
</ul>
@@ -139,17 +139,25 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#CLASS_RULE">CLASS_RULE</a></span></code> </td>
</tr>
<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.client.Table</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#htable3">htable3</a></span></code> </td>
+</tr>
+<tr class="altColor">
<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#LOG">LOG</a></span></code> </td>
</tr>
-<tr class="altColor">
+<tr class="rowColor">
<td class="colFirst"><code>org.junit.rules.TestName</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#name">name</a></span></code> </td>
</tr>
-<tr class="rowColor">
+<tr class="altColor">
<td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/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/TestVerifyReplication.html#PEER_ID">PEER_ID</a></span></code> </td>
</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.hadoop.hbase.TableName</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#peerTableName">peerTableName</a></span></code> </td>
+</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.TestReplicationBase">
@@ -184,7 +192,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd [...]
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
@@ -196,54 +204,74 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
int expectedCount)</code> </td>
</tr>
<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#runBatchCopyTest--">runBatchCopyTest</a></span>()</code> </td>
+</tr>
+<tr id="i2" class="altColor">
<td class="colFirst"><code>private void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#runVerifyReplication-java.lang.String:A-int-int-">runVerifyReplication</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args,
int expectedGoodRows,
int expectedBadRows)</code> </td>
</tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#setUp--">setUp</a></span>()</code> </td>
</tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#setUpBeforeClass--">setUpBeforeClass</a></span>()</code> </td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#tearDownAfterClass--">tearDownAfterClass</a></span>()</code> </td>
+</tr>
+<tr id="i6" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testHBase14905--">testHBase14905</a></span>()</code> </td>
</tr>
-<tr id="i4" class="altColor">
+<tr id="i7" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJob--">testVerifyRepJob</a></span>()</code>
<div class="block">Do a small loading into a table, make sure the data is really the same, then run the
VerifyReplication job to check the results.</div>
</td>
</tr>
-<tr id="i5" class="rowColor">
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithPeerTableName--">testVerifyRepJobWithPeerTableName</a></span>()</code> </td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithPeerTableNameAndSnapshotSupport--">testVerifyRepJobWithPeerTableNameAndSnapshotSupport</a></span>()</code> </td>
+</tr>
+<tr id="i10" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithQuorumAddress--">testVerifyRepJobWithQuorumAddress</a></span>()</code> </td>
</tr>
-<tr id="i6" class="altColor">
+<tr id="i11" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithQuorumAddressAndSnapshotSupport--">testVerifyRepJobWithQuorumAddressAndSnapshotSupport</a></span>()</code> </td>
</tr>
-<tr id="i7" class="rowColor">
+<tr id="i12" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyRepJobWithRawOptions--">testVerifyRepJobWithRawOptions</a></span>()</code>
<div class="block">Load a row into a table, make sure the data is really the same, delete the row, make sure the
delete marker is replicated, run verify replication with and without raw to check the results.</div>
</td>
</tr>
-<tr id="i8" class="altColor">
+<tr id="i13" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyReplicationPrefixFiltering--">testVerifyReplicationPrefixFiltering</a></span>()</code> </td>
</tr>
-<tr id="i9" class="rowColor">
+<tr id="i14" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyReplicationSnapshotArguments--">testVerifyReplicationSnapshotArguments</a></span>()</code> </td>
</tr>
-<tr id="i10" class="altColor">
+<tr id="i15" class="rowColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVerifyReplicationWithSnapshotSupport--">testVerifyReplicationWithSnapshotSupport</a></span>()</code> </td>
</tr>
-<tr id="i11" class="rowColor">
+<tr id="i16" class="altColor">
<td class="colFirst"><code>void</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/TestVerifyReplication.html#testVersionMismatchHBase14905--">testVersionMismatchHBase14905</a></span>()</code> </td>
</tr>
@@ -253,7 +281,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
+<code><a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a href="../.. [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -282,7 +310,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>CLASS_RULE</h4>
-<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.75">CLASS_RULE</a></pre>
+<pre>public static final <a href="../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.80">CLASS_RULE</a></pre>
</li>
</ul>
<a name="LOG">
@@ -291,7 +319,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>LOG</h4>
-<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.78">LOG</a></pre>
+<pre>private static final org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.83">LOG</a></pre>
</li>
</ul>
<a name="PEER_ID">
@@ -300,20 +328,38 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>PEER_ID</h4>
-<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.80">PEER_ID</a></pre>
+<pre>private static final <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.85">PEER_ID</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.replication.TestVerifyReplication.PEER_ID">Constant Field Values</a></dd>
</dl>
</li>
</ul>
+<a name="peerTableName">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>peerTableName</h4>
+<pre>private static final org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.86">peerTableName</a></pre>
+</li>
+</ul>
+<a name="htable3">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>htable3</h4>
+<pre>private static org.apache.hadoop.hbase.client.Table <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.87">htable3</a></pre>
+</li>
+</ul>
<a name="name">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>name</h4>
-<pre>public org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.83">name</a></pre>
+<pre>public org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.90">name</a></pre>
</li>
</ul>
</li>
@@ -330,7 +376,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockListLast">
<li class="blockList">
<h4>TestVerifyReplication</h4>
-<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.72">TestVerifyReplication</a>()</pre>
+<pre>public <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.77">TestVerifyReplication</a>()</pre>
</li>
</ul>
</li>
@@ -347,7 +393,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>setUp</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.86">setUp</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.93">setUp</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -355,13 +401,27 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
</dl>
</li>
</ul>
+<a name="setUpBeforeClass--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setUpBeforeClass</h4>
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.99">setUpBeforeClass</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
<a name="runVerifyReplication-java.lang.String:A-int-int-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>runVerifyReplication</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.90">runVerifyReplication</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.113">runVerifyReplication</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[] args,
int expectedGoodRows,
int expectedBadRows)
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>,
@@ -381,7 +441,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testVerifyRepJob</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.111">testVerifyRepJob</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.134">testVerifyRepJob</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Do a small loading into a table, make sure the data is really the same, then run the
VerifyReplication job to check the results. Do a second comparison where all the cells are
@@ -398,7 +458,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testVerifyRepJobWithRawOptions</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.139">testVerifyRepJobWithRawOptions</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.162">testVerifyRepJobWithRawOptions</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<div class="block">Load a row into a table, make sure the data is really the same, delete the row, make sure the
delete marker is replicated, run verify replication with and without raw to check the results.</div>
@@ -414,7 +474,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testHBase14905</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.228">testHBase14905</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.251">testHBase14905</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -428,7 +488,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testVersionMismatchHBase14905</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.291">testVersionMismatchHBase14905</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.314">testVersionMismatchHBase14905</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -442,7 +502,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testVerifyReplicationPrefixFiltering</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.359">testVerifyReplicationPrefixFiltering</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.382">testVerifyReplicationPrefixFiltering</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -456,7 +516,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testVerifyReplicationSnapshotArguments</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.373">testVerifyReplicationSnapshotArguments</a>()</pre>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.396">testVerifyReplicationSnapshotArguments</a>()</pre>
</li>
</ul>
<a name="checkRestoreTmpDir-org.apache.hadoop.conf.Configuration-java.lang.String-int-">
@@ -465,7 +525,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>checkRestoreTmpDir</h4>
-<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.403">checkRestoreTmpDir</a>(org.apache.hadoop.conf.Configuration conf,
+<pre>private void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.426">checkRestoreTmpDir</a>(org.apache.hadoop.conf.Configuration conf,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> restoreTmpDir,
int expectedCount)
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>
@@ -481,7 +541,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testVerifyReplicationWithSnapshotSupport</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.415">testVerifyReplicationWithSnapshotSupport</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.438">testVerifyReplicationWithSnapshotSupport</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -495,7 +555,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<ul class="blockList">
<li class="blockList">
<h4>testVerifyRepJobWithQuorumAddress</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.477">testVerifyRepJobWithQuorumAddress</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.500">testVerifyRepJobWithQuorumAddress</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -506,10 +566,52 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
<a name="testVerifyRepJobWithQuorumAddressAndSnapshotSupport--">
<!-- -->
</a>
-<ul class="blockListLast">
+<ul class="blockList">
<li class="blockList">
<h4>testVerifyRepJobWithQuorumAddressAndSnapshotSupport</h4>
-<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.502">testVerifyRepJobWithQuorumAddressAndSnapshotSupport</a>()
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.525">testVerifyRepJobWithQuorumAddressAndSnapshotSupport</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="runBatchCopyTest--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>runBatchCopyTest</h4>
+<pre>private static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.588">runBatchCopyTest</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testVerifyRepJobWithPeerTableName--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testVerifyRepJobWithPeerTableName</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.617">testVerifyRepJobWithPeerTableName</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="testVerifyRepJobWithPeerTableNameAndSnapshotSupport--">
+<!-- -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testVerifyRepJobWithPeerTableNameAndSnapshotSupport</h4>
+<pre>public void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.631">testVerifyRepJobWithPeerTableNameAndSnapshotSupport</a>()
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -517,6 +619,20 @@ extends <a href="../../../../../org/apache/hadoop/hbase/replication/TestReplicat
</dl>
</li>
</ul>
+<a name="tearDownAfterClass--">
+<!-- -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>tearDownAfterClass</h4>
+<pre>public static void <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html#line.696">tearDownAfterClass</a>()
+ throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
</li>
</ul>
</li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleAsyncWAL.html b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleAsyncWAL.html
index b6f5ef8..88bc69e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleAsyncWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleAsyncWAL.html
@@ -214,7 +214,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleWAL.html b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleWAL.html
index 2741792..010bae7 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationEndpointWithMultipleWAL.html
@@ -214,7 +214,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleAsyncWAL.html b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleAsyncWAL.html
index 7873eee..517e735 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleAsyncWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleAsyncWAL.html
@@ -216,7 +216,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.html b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.html
index 81c876b..7e20eed 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationKillMasterRSCompressedWithMultipleWAL.html
@@ -216,7 +216,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleAsyncWAL.html b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleAsyncWAL.html
index 6fa3771..1c284e6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleAsyncWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleAsyncWAL.html
@@ -206,7 +206,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html
index d38442f..31c1975 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/multiwal/TestReplicationSyncUpToolWithMultipleWAL.html
@@ -206,7 +206,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html
index ff29f32..05b2748 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicator.html
@@ -235,7 +235,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/TestRepli
<!-- -->
</a>
<h3>Methods inherited from class org.apache.hadoop.hbase.replication.<a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html" title="class in org.apache.hadoop.hbase.replication">TestReplicationBase</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#cleanUp--">cleanUp</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#configureClusters--">configureClusters</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSerialPeer--">isSerialPeer</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/TestReplicationBase.html#isSyncPeer--">isSyncPeer</a>, <a [...]
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index 9863adc..5d7e588 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,9 +253,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
</ul>
</li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index f4cae08..a9f83d0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -148,9 +148,9 @@
<ul>
<li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a><E> (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a><T>, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
<ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
</ul>
</li>
</ul>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html
index 25ea240..3778f26 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/TestHBaseTestingUtility.html
@@ -283,230 +283,232 @@
<span class="sourceLineNo">275</span> List<Integer> clientPortListInCluster = cluster1.getClientPortList();<a name="line.275"></a>
<span class="sourceLineNo">276</span><a name="line.276"></a>
<span class="sourceLineNo">277</span> for (i = 0; i < clientPortListInCluster.size(); i++) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span> assertEquals(clientPortListInCluster.get(i).intValue(), clientPortList1[i]);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span> } finally {<a name="line.280"></a>
-<span class="sourceLineNo">281</span> hbt.shutdownMiniZKCluster();<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> // Test 2 - set up zookeeper cluster with more ZK servers than specified client ports<a name="line.284"></a>
-<span class="sourceLineNo">285</span> hbt.getConfiguration().setInt("test.hbase.zookeeper.property.clientPort", defaultClientPort);<a name="line.285"></a>
-<span class="sourceLineNo">286</span> int [] clientPortList2 = {2222, 2223};<a name="line.286"></a>
-<span class="sourceLineNo">287</span> MiniZooKeeperCluster cluster2 =<a name="line.287"></a>
-<span class="sourceLineNo">288</span> hbt.startMiniZKCluster(clientPortList2.length + 2, clientPortList2);<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span> try {<a name="line.290"></a>
-<span class="sourceLineNo">291</span> List<Integer> clientPortListInCluster = cluster2.getClientPortList();<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span> for (i = 0, j = 0; i < clientPortListInCluster.size(); i++) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span> if (i < clientPortList2.length) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span> assertEquals(clientPortListInCluster.get(i).intValue(), clientPortList2[i]);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> } else {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> // servers with no specified client port will use defaultClientPort or some other ports<a name="line.297"></a>
-<span class="sourceLineNo">298</span> // based on defaultClientPort<a name="line.298"></a>
-<span class="sourceLineNo">299</span> assertEquals(clientPortListInCluster.get(i).intValue(), defaultClientPort + j);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> j++;<a name="line.300"></a>
-<span class="sourceLineNo">301</span> }<a name="line.301"></a>
-<span class="sourceLineNo">302</span> }<a name="line.302"></a>
-<span class="sourceLineNo">303</span> } finally {<a name="line.303"></a>
-<span class="sourceLineNo">304</span> hbt.shutdownMiniZKCluster();<a name="line.304"></a>
-<span class="sourceLineNo">305</span> }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span> // Test 3 - set up zookeeper cluster with invalid client ports<a name="line.307"></a>
-<span class="sourceLineNo">308</span> hbt.getConfiguration().setInt("test.hbase.zookeeper.property.clientPort", defaultClientPort);<a name="line.308"></a>
-<span class="sourceLineNo">309</span> int [] clientPortList3 = {3333, -3334, 3335, 0};<a name="line.309"></a>
-<span class="sourceLineNo">310</span> MiniZooKeeperCluster cluster3 =<a name="line.310"></a>
-<span class="sourceLineNo">311</span> hbt.startMiniZKCluster(clientPortList3.length + 1, clientPortList3);<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> try {<a name="line.313"></a>
-<span class="sourceLineNo">314</span> List<Integer> clientPortListInCluster = cluster3.getClientPortList();<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span> for (i = 0, j = 0; i < clientPortListInCluster.size(); i++) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span> // Servers will only use valid client ports; if ports are not specified or invalid,<a name="line.317"></a>
-<span class="sourceLineNo">318</span> // the default port or a port based on default port will be used.<a name="line.318"></a>
-<span class="sourceLineNo">319</span> if (i < clientPortList3.length && clientPortList3[i] > 0) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> assertEquals(clientPortListInCluster.get(i).intValue(), clientPortList3[i]);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> } else {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> assertEquals(clientPortListInCluster.get(i).intValue(), defaultClientPort + j);<a name="line.322"></a>
-<span class="sourceLineNo">323</span> j++;<a name="line.323"></a>
-<span class="sourceLineNo">324</span> }<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> } finally {<a name="line.326"></a>
-<span class="sourceLineNo">327</span> hbt.shutdownMiniZKCluster();<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span> // Test 4 - set up zookeeper cluster with default port and some other ports used<a name="line.330"></a>
-<span class="sourceLineNo">331</span> // This test tests that the defaultClientPort and defaultClientPort+2 are used, so<a name="line.331"></a>
-<span class="sourceLineNo">332</span> // the algorithm should choice defaultClientPort+1 and defaultClientPort+3 to fill<a name="line.332"></a>
-<span class="sourceLineNo">333</span> // out the ports for servers without ports specified.<a name="line.333"></a>
-<span class="sourceLineNo">334</span> hbt.getConfiguration().setInt("test.hbase.zookeeper.property.clientPort", defaultClientPort);<a name="line.334"></a>
-<span class="sourceLineNo">335</span> int [] clientPortList4 = {-4444, defaultClientPort+2, 4446, defaultClientPort};<a name="line.335"></a>
-<span class="sourceLineNo">336</span> MiniZooKeeperCluster cluster4 =<a name="line.336"></a>
-<span class="sourceLineNo">337</span> hbt.startMiniZKCluster(clientPortList4.length + 1, clientPortList4);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> try {<a name="line.339"></a>
-<span class="sourceLineNo">340</span> List<Integer> clientPortListInCluster = cluster4.getClientPortList();<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> for (i = 0, j = 1; i < clientPortListInCluster.size(); i++) {<a name="line.342"></a>
-<span class="sourceLineNo">343</span> // Servers will only use valid client ports; if ports are not specified or invalid,<a name="line.343"></a>
-<span class="sourceLineNo">344</span> // the default port or a port based on default port will be used.<a name="line.344"></a>
-<span class="sourceLineNo">345</span> if (i < clientPortList4.length && clientPortList4[i] > 0) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span> assertEquals(clientPortListInCluster.get(i).intValue(), clientPortList4[i]);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> } else {<a name="line.347"></a>
-<span class="sourceLineNo">348</span> assertEquals(clientPortListInCluster.get(i).intValue(), defaultClientPort + j);<a name="line.348"></a>
-<span class="sourceLineNo">349</span> j +=2;<a name="line.349"></a>
-<span class="sourceLineNo">350</span> }<a name="line.350"></a>
-<span class="sourceLineNo">351</span> }<a name="line.351"></a>
-<span class="sourceLineNo">352</span> } finally {<a name="line.352"></a>
-<span class="sourceLineNo">353</span> hbt.shutdownMiniZKCluster();<a name="line.353"></a>
-<span class="sourceLineNo">354</span> }<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span> // Test 5 - set up zookeeper cluster with same ports specified - fail is expected.<a name="line.356"></a>
-<span class="sourceLineNo">357</span> int [] clientPortList5 = {5555, 5556, 5556};<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span> try {<a name="line.359"></a>
-<span class="sourceLineNo">360</span> MiniZooKeeperCluster cluster5 =<a name="line.360"></a>
-<span class="sourceLineNo">361</span> hbt.startMiniZKCluster(clientPortList5.length, clientPortList5);<a name="line.361"></a>
-<span class="sourceLineNo">362</span> assertTrue(cluster5.getClientPort() == -1); // expected failure<a name="line.362"></a>
-<span class="sourceLineNo">363</span> } catch (Exception e) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span> // exception is acceptable<a name="line.364"></a>
-<span class="sourceLineNo">365</span> } finally {<a name="line.365"></a>
-<span class="sourceLineNo">366</span> hbt.shutdownMiniZKCluster();<a name="line.366"></a>
-<span class="sourceLineNo">367</span> }<a name="line.367"></a>
-<span class="sourceLineNo">368</span> }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span> @Test public void testMiniDFSCluster() throws Exception {<a name="line.370"></a>
-<span class="sourceLineNo">371</span> HBaseTestingUtility hbt = new HBaseTestingUtility();<a name="line.371"></a>
-<span class="sourceLineNo">372</span> MiniDFSCluster cluster = hbt.startMiniDFSCluster(null);<a name="line.372"></a>
-<span class="sourceLineNo">373</span> FileSystem dfs = cluster.getFileSystem();<a name="line.373"></a>
-<span class="sourceLineNo">374</span> Path dir = new Path("dir");<a name="line.374"></a>
-<span class="sourceLineNo">375</span> Path qualifiedDir = dfs.makeQualified(dir);<a name="line.375"></a>
-<span class="sourceLineNo">376</span> LOG.info("dir=" + dir + ", qualifiedDir=" + qualifiedDir);<a name="line.376"></a>
-<span class="sourceLineNo">377</span> assertFalse(dfs.exists(qualifiedDir));<a name="line.377"></a>
-<span class="sourceLineNo">378</span> assertTrue(dfs.mkdirs(qualifiedDir));<a name="line.378"></a>
-<span class="sourceLineNo">379</span> assertTrue(dfs.delete(qualifiedDir, true));<a name="line.379"></a>
-<span class="sourceLineNo">380</span> hbt.shutdownMiniCluster();<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> @Test public void testSetupClusterTestBuildDir() throws Exception {<a name="line.383"></a>
-<span class="sourceLineNo">384</span> HBaseTestingUtility hbt = new HBaseTestingUtility();<a name="line.384"></a>
-<span class="sourceLineNo">385</span> Path testdir = hbt.getClusterTestDir();<a name="line.385"></a>
-<span class="sourceLineNo">386</span> LOG.info("uuid-subdir=" + testdir);<a name="line.386"></a>
-<span class="sourceLineNo">387</span> FileSystem fs = hbt.getTestFileSystem();<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span> assertFalse(fs.exists(testdir));<a name="line.389"></a>
+<span class="sourceLineNo">278</span> // cannot assert the specific port due to the port conflict in which situation<a name="line.278"></a>
+<span class="sourceLineNo">279</span> // it always chooses a bigger port by +1. The below is the same.<a name="line.279"></a>
+<span class="sourceLineNo">280</span> assertTrue(clientPortListInCluster.get(i).intValue() >= clientPortList1[i]);<a name="line.280"></a>
+<span class="sourceLineNo">281</span> }<a name="line.281"></a>
+<span class="sourceLineNo">282</span> } finally {<a name="line.282"></a>
+<span class="sourceLineNo">283</span> hbt.shutdownMiniZKCluster();<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> // Test 2 - set up zookeeper cluster with more ZK servers than specified client ports<a name="line.286"></a>
+<span class="sourceLineNo">287</span> hbt.getConfiguration().setInt("test.hbase.zookeeper.property.clientPort", defaultClientPort);<a name="line.287"></a>
+<span class="sourceLineNo">288</span> int [] clientPortList2 = {2222, 2223};<a name="line.288"></a>
+<span class="sourceLineNo">289</span> MiniZooKeeperCluster cluster2 =<a name="line.289"></a>
+<span class="sourceLineNo">290</span> hbt.startMiniZKCluster(clientPortList2.length + 2, clientPortList2);<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span> try {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> List<Integer> clientPortListInCluster = cluster2.getClientPortList();<a name="line.293"></a>
+<span class="sourceLineNo">294</span><a name="line.294"></a>
+<span class="sourceLineNo">295</span> for (i = 0, j = 0; i < clientPortListInCluster.size(); i++) {<a name="line.295"></a>
+<span class="sourceLineNo">296</span> if (i < clientPortList2.length) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span> assertTrue(clientPortListInCluster.get(i).intValue() >= clientPortList2[i]);<a name="line.297"></a>
+<span class="sourceLineNo">298</span> } else {<a name="line.298"></a>
+<span class="sourceLineNo">299</span> // servers with no specified client port will use defaultClientPort or some other ports<a name="line.299"></a>
+<span class="sourceLineNo">300</span> // based on defaultClientPort<a name="line.300"></a>
+<span class="sourceLineNo">301</span> assertTrue(clientPortListInCluster.get(i).intValue() >= defaultClientPort + j);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> j++;<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> }<a name="line.304"></a>
+<span class="sourceLineNo">305</span> } finally {<a name="line.305"></a>
+<span class="sourceLineNo">306</span> hbt.shutdownMiniZKCluster();<a name="line.306"></a>
+<span class="sourceLineNo">307</span> }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span> // Test 3 - set up zookeeper cluster with invalid client ports<a name="line.309"></a>
+<span class="sourceLineNo">310</span> hbt.getConfiguration().setInt("test.hbase.zookeeper.property.clientPort", defaultClientPort);<a name="line.310"></a>
+<span class="sourceLineNo">311</span> int [] clientPortList3 = {3333, -3334, 3335, 0};<a name="line.311"></a>
+<span class="sourceLineNo">312</span> MiniZooKeeperCluster cluster3 =<a name="line.312"></a>
+<span class="sourceLineNo">313</span> hbt.startMiniZKCluster(clientPortList3.length + 1, clientPortList3);<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span> try {<a name="line.315"></a>
+<span class="sourceLineNo">316</span> List<Integer> clientPortListInCluster = cluster3.getClientPortList();<a name="line.316"></a>
+<span class="sourceLineNo">317</span><a name="line.317"></a>
+<span class="sourceLineNo">318</span> for (i = 0, j = 0; i < clientPortListInCluster.size(); i++) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span> // Servers will only use valid client ports; if ports are not specified or invalid,<a name="line.319"></a>
+<span class="sourceLineNo">320</span> // the default port or a port based on default port will be used.<a name="line.320"></a>
+<span class="sourceLineNo">321</span> if (i < clientPortList3.length && clientPortList3[i] > 0) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span> assertTrue(clientPortListInCluster.get(i).intValue() >= clientPortList3[i]);<a name="line.322"></a>
+<span class="sourceLineNo">323</span> } else {<a name="line.323"></a>
+<span class="sourceLineNo">324</span> assertTrue(clientPortListInCluster.get(i).intValue() >= defaultClientPort + j);<a name="line.324"></a>
+<span class="sourceLineNo">325</span> j++;<a name="line.325"></a>
+<span class="sourceLineNo">326</span> }<a name="line.326"></a>
+<span class="sourceLineNo">327</span> }<a name="line.327"></a>
+<span class="sourceLineNo">328</span> } finally {<a name="line.328"></a>
+<span class="sourceLineNo">329</span> hbt.shutdownMiniZKCluster();<a name="line.329"></a>
+<span class="sourceLineNo">330</span> }<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> // Test 4 - set up zookeeper cluster with default port and some other ports used<a name="line.332"></a>
+<span class="sourceLineNo">333</span> // This test tests that the defaultClientPort and defaultClientPort+2 are used, so<a name="line.333"></a>
+<span class="sourceLineNo">334</span> // the algorithm should choice defaultClientPort+1 and defaultClientPort+3 to fill<a name="line.334"></a>
+<span class="sourceLineNo">335</span> // out the ports for servers without ports specified.<a name="line.335"></a>
+<span class="sourceLineNo">336</span> hbt.getConfiguration().setInt("test.hbase.zookeeper.property.clientPort", defaultClientPort);<a name="line.336"></a>
+<span class="sourceLineNo">337</span> int [] clientPortList4 = {-4444, defaultClientPort+2, 4446, defaultClientPort};<a name="line.337"></a>
+<span class="sourceLineNo">338</span> MiniZooKeeperCluster cluster4 =<a name="line.338"></a>
+<span class="sourceLineNo">339</span> hbt.startMiniZKCluster(clientPortList4.length + 1, clientPortList4);<a name="line.339"></a>
+<span class="sourceLineNo">340</span><a name="line.340"></a>
+<span class="sourceLineNo">341</span> try {<a name="line.341"></a>
+<span class="sourceLineNo">342</span> List<Integer> clientPortListInCluster = cluster4.getClientPortList();<a name="line.342"></a>
+<span class="sourceLineNo">343</span><a name="line.343"></a>
+<span class="sourceLineNo">344</span> for (i = 0, j = 1; i < clientPortListInCluster.size(); i++) {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> // Servers will only use valid client ports; if ports are not specified or invalid,<a name="line.345"></a>
+<span class="sourceLineNo">346</span> // the default port or a port based on default port will be used.<a name="line.346"></a>
+<span class="sourceLineNo">347</span> if (i < clientPortList4.length && clientPortList4[i] > 0) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> assertTrue(clientPortListInCluster.get(i).intValue() >= clientPortList4[i]);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } else {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> assertTrue(clientPortListInCluster.get(i).intValue() >= defaultClientPort + j);<a name="line.350"></a>
+<span class="sourceLineNo">351</span> j +=2;<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span> } finally {<a name="line.354"></a>
+<span class="sourceLineNo">355</span> hbt.shutdownMiniZKCluster();<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">357</span><a name="line.357"></a>
+<span class="sourceLineNo">358</span> // Test 5 - set up zookeeper cluster with same ports specified - fail is expected.<a name="line.358"></a>
+<span class="sourceLineNo">359</span> int [] clientPortList5 = {5555, 5556, 5556};<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span> try {<a name="line.361"></a>
+<span class="sourceLineNo">362</span> MiniZooKeeperCluster cluster5 =<a name="line.362"></a>
+<span class="sourceLineNo">363</span> hbt.startMiniZKCluster(clientPortList5.length, clientPortList5);<a name="line.363"></a>
+<span class="sourceLineNo">364</span> assertTrue(cluster5.getClientPort() == -1); // expected failure<a name="line.364"></a>
+<span class="sourceLineNo">365</span> } catch (Exception e) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span> // exception is acceptable<a name="line.366"></a>
+<span class="sourceLineNo">367</span> } finally {<a name="line.367"></a>
+<span class="sourceLineNo">368</span> hbt.shutdownMiniZKCluster();<a name="line.368"></a>
+<span class="sourceLineNo">369</span> }<a name="line.369"></a>
+<span class="sourceLineNo">370</span> }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span> @Test public void testMiniDFSCluster() throws Exception {<a name="line.372"></a>
+<span class="sourceLineNo">373</span> HBaseTestingUtility hbt = new HBaseTestingUtility();<a name="line.373"></a>
+<span class="sourceLineNo">374</span> MiniDFSCluster cluster = hbt.startMiniDFSCluster(null);<a name="line.374"></a>
+<span class="sourceLineNo">375</span> FileSystem dfs = cluster.getFileSystem();<a name="line.375"></a>
+<span class="sourceLineNo">376</span> Path dir = new Path("dir");<a name="line.376"></a>
+<span class="sourceLineNo">377</span> Path qualifiedDir = dfs.makeQualified(dir);<a name="line.377"></a>
+<span class="sourceLineNo">378</span> LOG.info("dir=" + dir + ", qualifiedDir=" + qualifiedDir);<a name="line.378"></a>
+<span class="sourceLineNo">379</span> assertFalse(dfs.exists(qualifiedDir));<a name="line.379"></a>
+<span class="sourceLineNo">380</span> assertTrue(dfs.mkdirs(qualifiedDir));<a name="line.380"></a>
+<span class="sourceLineNo">381</span> assertTrue(dfs.delete(qualifiedDir, true));<a name="line.381"></a>
+<span class="sourceLineNo">382</span> hbt.shutdownMiniCluster();<a name="line.382"></a>
+<span class="sourceLineNo">383</span> }<a name="line.383"></a>
+<span class="sourceLineNo">384</span><a name="line.384"></a>
+<span class="sourceLineNo">385</span> @Test public void testSetupClusterTestBuildDir() throws Exception {<a name="line.385"></a>
+<span class="sourceLineNo">386</span> HBaseTestingUtility hbt = new HBaseTestingUtility();<a name="line.386"></a>
+<span class="sourceLineNo">387</span> Path testdir = hbt.getClusterTestDir();<a name="line.387"></a>
+<span class="sourceLineNo">388</span> LOG.info("uuid-subdir=" + testdir);<a name="line.388"></a>
+<span class="sourceLineNo">389</span> FileSystem fs = hbt.getTestFileSystem();<a name="line.389"></a>
<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span> hbt.startMiniDFSCluster(null);<a name="line.391"></a>
-<span class="sourceLineNo">392</span> assertTrue(fs.exists(testdir));<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span> hbt.shutdownMiniCluster();<a name="line.394"></a>
-<span class="sourceLineNo">395</span> assertFalse(fs.exists(testdir));<a name="line.395"></a>
-<span class="sourceLineNo">396</span> }<a name="line.396"></a>
-<span class="sourceLineNo">397</span><a name="line.397"></a>
-<span class="sourceLineNo">398</span> @Test public void testTestDir() throws Exception {<a name="line.398"></a>
-<span class="sourceLineNo">399</span> HBaseTestingUtility hbt = new HBaseTestingUtility();<a name="line.399"></a>
-<span class="sourceLineNo">400</span> Path testdir = hbt.getDataTestDir();<a name="line.400"></a>
-<span class="sourceLineNo">401</span> LOG.info("testdir=" + testdir);<a name="line.401"></a>
-<span class="sourceLineNo">402</span> FileSystem fs = hbt.getTestFileSystem();<a name="line.402"></a>
-<span class="sourceLineNo">403</span> assertTrue(!fs.exists(testdir));<a name="line.403"></a>
-<span class="sourceLineNo">404</span> assertTrue(fs.mkdirs(testdir));<a name="line.404"></a>
-<span class="sourceLineNo">405</span> assertTrue(hbt.cleanupTestDir());<a name="line.405"></a>
-<span class="sourceLineNo">406</span> }<a name="line.406"></a>
-<span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span> @Test public void testResolvePortConflict() throws Exception {<a name="line.408"></a>
-<span class="sourceLineNo">409</span> // raises port conflict between 1st call and 2nd call of randomPort() by mocking Random object<a name="line.409"></a>
-<span class="sourceLineNo">410</span> Random random = mock(Random.class);<a name="line.410"></a>
-<span class="sourceLineNo">411</span> when(random.nextInt(anyInt()))<a name="line.411"></a>
-<span class="sourceLineNo">412</span> .thenAnswer(new Answer<Integer>() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span> int[] numbers = { 1, 1, 2 };<a name="line.413"></a>
-<span class="sourceLineNo">414</span> int count = 0;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span> @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span> public Integer answer(InvocationOnMock invocation) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span> int ret = numbers[count];<a name="line.418"></a>
-<span class="sourceLineNo">419</span> count++;<a name="line.419"></a>
-<span class="sourceLineNo">420</span> return ret;<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><a name="line.423"></a>
-<span class="sourceLineNo">424</span> HBaseTestingUtility.PortAllocator.AvailablePortChecker portChecker =<a name="line.424"></a>
-<span class="sourceLineNo">425</span> mock(HBaseTestingUtility.PortAllocator.AvailablePortChecker.class);<a name="line.425"></a>
-<span class="sourceLineNo">426</span> when(portChecker.available(anyInt())).thenReturn(true);<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span> HBaseTestingUtility.PortAllocator portAllocator =<a name="line.428"></a>
-<span class="sourceLineNo">429</span> new HBaseTestingUtility.PortAllocator(random, portChecker);<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span> int port1 = portAllocator.randomFreePort();<a name="line.431"></a>
-<span class="sourceLineNo">432</span> int port2 = portAllocator.randomFreePort();<a name="line.432"></a>
-<span class="sourceLineNo">433</span> assertNotEquals(port1, port2);<a name="line.433"></a>
-<span class="sourceLineNo">434</span> Mockito.verify(random, Mockito.times(3)).nextInt(anyInt());<a name="line.434"></a>
-<span class="sourceLineNo">435</span> }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span> @Test<a name="line.437"></a>
-<span class="sourceLineNo">438</span> public void testOverridingOfDefaultPorts() throws Exception {<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span> // confirm that default port properties being overridden to random<a name="line.440"></a>
-<span class="sourceLineNo">441</span> Configuration defaultConfig = HBaseConfiguration.create();<a name="line.441"></a>
-<span class="sourceLineNo">442</span> defaultConfig.setInt(HConstants.MASTER_INFO_PORT, HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> defaultConfig.setInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.443"></a>
-<span class="sourceLineNo">444</span> HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.444"></a>
-<span class="sourceLineNo">445</span> HBaseTestingUtility htu = new HBaseTestingUtility(defaultConfig);<a name="line.445"></a>
-<span class="sourceLineNo">446</span> try {<a name="line.446"></a>
-<span class="sourceLineNo">447</span> MiniHBaseCluster defaultCluster = htu.startMiniCluster();<a name="line.447"></a>
-<span class="sourceLineNo">448</span> assertNotEquals(HConstants.DEFAULT_MASTER_INFOPORT,<a name="line.448"></a>
-<span class="sourceLineNo">449</span> defaultCluster.getConfiguration().getInt(HConstants.MASTER_INFO_PORT, 0));<a name="line.449"></a>
-<span class="sourceLineNo">450</span> assertNotEquals(HConstants.DEFAULT_REGIONSERVER_INFOPORT,<a name="line.450"></a>
-<span class="sourceLineNo">451</span> defaultCluster.getConfiguration().getInt(HConstants.REGIONSERVER_INFO_PORT, 0));<a name="line.451"></a>
-<span class="sourceLineNo">452</span> } finally {<a name="line.452"></a>
-<span class="sourceLineNo">453</span> htu.shutdownMiniCluster();<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> // confirm that nonDefault (custom) port settings are NOT overridden<a name="line.456"></a>
-<span class="sourceLineNo">457</span> Configuration altConfig = HBaseConfiguration.create();<a name="line.457"></a>
-<span class="sourceLineNo">458</span> final int nonDefaultMasterInfoPort = 3333;<a name="line.458"></a>
-<span class="sourceLineNo">459</span> final int nonDefaultRegionServerPort = 4444;<a name="line.459"></a>
-<span class="sourceLineNo">460</span> altConfig.setInt(HConstants.MASTER_INFO_PORT, nonDefaultMasterInfoPort);<a name="line.460"></a>
-<span class="sourceLineNo">461</span> altConfig.setInt(HConstants.REGIONSERVER_INFO_PORT, nonDefaultRegionServerPort);<a name="line.461"></a>
-<span class="sourceLineNo">462</span> htu = new HBaseTestingUtility(altConfig);<a name="line.462"></a>
-<span class="sourceLineNo">463</span> try {<a name="line.463"></a>
-<span class="sourceLineNo">464</span> MiniHBaseCluster customCluster = htu.startMiniCluster();<a name="line.464"></a>
-<span class="sourceLineNo">465</span> assertEquals(nonDefaultMasterInfoPort,<a name="line.465"></a>
-<span class="sourceLineNo">466</span> customCluster.getConfiguration().getInt(HConstants.MASTER_INFO_PORT, 0));<a name="line.466"></a>
-<span class="sourceLineNo">467</span> assertEquals(nonDefaultRegionServerPort,<a name="line.467"></a>
-<span class="sourceLineNo">468</span> customCluster.getConfiguration().getInt(HConstants.REGIONSERVER_INFO_PORT, 0));<a name="line.468"></a>
-<span class="sourceLineNo">469</span> } finally {<a name="line.469"></a>
-<span class="sourceLineNo">470</span> htu.shutdownMiniCluster();<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> // This test demonstrates how long killHBTU takes vs. shutdownHBTU takes<a name="line.474"></a>
-<span class="sourceLineNo">475</span> // for realistic results, adjust NUMROWS, NUMTABLES to much larger number.<a name="line.475"></a>
-<span class="sourceLineNo">476</span> @Test<a name="line.476"></a>
-<span class="sourceLineNo">477</span> public void testKillMiniHBaseCluster() throws Exception {<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span> HBaseTestingUtility htu = new HBaseTestingUtility();<a name="line.479"></a>
-<span class="sourceLineNo">480</span> htu.startMiniZKCluster();<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span> try {<a name="line.482"></a>
-<span class="sourceLineNo">483</span> htu.startMiniHBaseCluster();<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span> TableName tableName;<a name="line.485"></a>
-<span class="sourceLineNo">486</span> byte[] FAM_NAME;<a name="line.486"></a>
-<span class="sourceLineNo">487</span><a name="line.487"></a>
-<span class="sourceLineNo">488</span> for(int i = 0; i < NUMTABLES; i++) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span> tableName = TableName.valueOf(name.getMethodName() + i);<a name="line.489"></a>
-<span class="sourceLineNo">490</span> FAM_NAME = Bytes.toBytes("fam" + i);<a name="line.490"></a>
-<span class="sourceLineNo">491</span><a name="line.491"></a>
-<span class="sourceLineNo">492</span> try (Table table = htu.createMultiRegionTable(tableName, FAM_NAME, NUMREGIONS)) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span> htu.loadRandomRows(table, FAM_NAME, 100, NUMROWS);<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> } finally {<a name="line.496"></a>
-<span class="sourceLineNo">497</span> htu.killMiniHBaseCluster();<a name="line.497"></a>
-<span class="sourceLineNo">498</span> htu.shutdownMiniZKCluster();<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">391</span> assertFalse(fs.exists(testdir));<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span> hbt.startMiniDFSCluster(null);<a name="line.393"></a>
+<span class="sourceLineNo">394</span> assertTrue(fs.exists(testdir));<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span> hbt.shutdownMiniCluster();<a name="line.396"></a>
+<span class="sourceLineNo">397</span> assertFalse(fs.exists(testdir));<a name="line.397"></a>
+<span class="sourceLineNo">398</span> }<a name="line.398"></a>
+<span class="sourceLineNo">399</span><a name="line.399"></a>
+<span class="sourceLineNo">400</span> @Test public void testTestDir() throws Exception {<a name="line.400"></a>
+<span class="sourceLineNo">401</span> HBaseTestingUtility hbt = new HBaseTestingUtility();<a name="line.401"></a>
+<span class="sourceLineNo">402</span> Path testdir = hbt.getDataTestDir();<a name="line.402"></a>
+<span class="sourceLineNo">403</span> LOG.info("testdir=" + testdir);<a name="line.403"></a>
+<span class="sourceLineNo">404</span> FileSystem fs = hbt.getTestFileSystem();<a name="line.404"></a>
+<span class="sourceLineNo">405</span> assertTrue(!fs.exists(testdir));<a name="line.405"></a>
+<span class="sourceLineNo">406</span> assertTrue(fs.mkdirs(testdir));<a name="line.406"></a>
+<span class="sourceLineNo">407</span> assertTrue(hbt.cleanupTestDir());<a name="line.407"></a>
+<span class="sourceLineNo">408</span> }<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span> @Test public void testResolvePortConflict() throws Exception {<a name="line.410"></a>
+<span class="sourceLineNo">411</span> // raises port conflict between 1st call and 2nd call of randomPort() by mocking Random object<a name="line.411"></a>
+<span class="sourceLineNo">412</span> Random random = mock(Random.class);<a name="line.412"></a>
+<span class="sourceLineNo">413</span> when(random.nextInt(anyInt()))<a name="line.413"></a>
+<span class="sourceLineNo">414</span> .thenAnswer(new Answer<Integer>() {<a name="line.414"></a>
+<span class="sourceLineNo">415</span> int[] numbers = { 1, 1, 2 };<a name="line.415"></a>
+<span class="sourceLineNo">416</span> int count = 0;<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span> @Override<a name="line.418"></a>
+<span class="sourceLineNo">419</span> public Integer answer(InvocationOnMock invocation) {<a name="line.419"></a>
+<span class="sourceLineNo">420</span> int ret = numbers[count];<a name="line.420"></a>
+<span class="sourceLineNo">421</span> count++;<a name="line.421"></a>
+<span class="sourceLineNo">422</span> return ret;<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><a name="line.425"></a>
+<span class="sourceLineNo">426</span> HBaseTestingUtility.PortAllocator.AvailablePortChecker portChecker =<a name="line.426"></a>
+<span class="sourceLineNo">427</span> mock(HBaseTestingUtility.PortAllocator.AvailablePortChecker.class);<a name="line.427"></a>
+<span class="sourceLineNo">428</span> when(portChecker.available(anyInt())).thenReturn(true);<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span> HBaseTestingUtility.PortAllocator portAllocator =<a name="line.430"></a>
+<span class="sourceLineNo">431</span> new HBaseTestingUtility.PortAllocator(random, portChecker);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span> int port1 = portAllocator.randomFreePort();<a name="line.433"></a>
+<span class="sourceLineNo">434</span> int port2 = portAllocator.randomFreePort();<a name="line.434"></a>
+<span class="sourceLineNo">435</span> assertNotEquals(port1, port2);<a name="line.435"></a>
+<span class="sourceLineNo">436</span> Mockito.verify(random, Mockito.times(3)).nextInt(anyInt());<a name="line.436"></a>
+<span class="sourceLineNo">437</span> }<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span> @Test<a name="line.439"></a>
+<span class="sourceLineNo">440</span> public void testOverridingOfDefaultPorts() throws Exception {<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span> // confirm that default port properties being overridden to random<a name="line.442"></a>
+<span class="sourceLineNo">443</span> Configuration defaultConfig = HBaseConfiguration.create();<a name="line.443"></a>
+<span class="sourceLineNo">444</span> defaultConfig.setInt(HConstants.MASTER_INFO_PORT, HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.444"></a>
+<span class="sourceLineNo">445</span> defaultConfig.setInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.445"></a>
+<span class="sourceLineNo">446</span> HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.446"></a>
+<span class="sourceLineNo">447</span> HBaseTestingUtility htu = new HBaseTestingUtility(defaultConfig);<a name="line.447"></a>
+<span class="sourceLineNo">448</span> try {<a name="line.448"></a>
+<span class="sourceLineNo">449</span> MiniHBaseCluster defaultCluster = htu.startMiniCluster();<a name="line.449"></a>
+<span class="sourceLineNo">450</span> assertNotEquals(HConstants.DEFAULT_MASTER_INFOPORT,<a name="line.450"></a>
+<span class="sourceLineNo">451</span> defaultCluster.getConfiguration().getInt(HConstants.MASTER_INFO_PORT, 0));<a name="line.451"></a>
+<span class="sourceLineNo">452</span> assertNotEquals(HConstants.DEFAULT_REGIONSERVER_INFOPORT,<a name="line.452"></a>
+<span class="sourceLineNo">453</span> defaultCluster.getConfiguration().getInt(HConstants.REGIONSERVER_INFO_PORT, 0));<a name="line.453"></a>
+<span class="sourceLineNo">454</span> } finally {<a name="line.454"></a>
+<span class="sourceLineNo">455</span> htu.shutdownMiniCluster();<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> // confirm that nonDefault (custom) port settings are NOT overridden<a name="line.458"></a>
+<span class="sourceLineNo">459</span> Configuration altConfig = HBaseConfiguration.create();<a name="line.459"></a>
+<span class="sourceLineNo">460</span> final int nonDefaultMasterInfoPort = 3333;<a name="line.460"></a>
+<span class="sourceLineNo">461</span> final int nonDefaultRegionServerPort = 4444;<a name="line.461"></a>
+<span class="sourceLineNo">462</span> altConfig.setInt(HConstants.MASTER_INFO_PORT, nonDefaultMasterInfoPort);<a name="line.462"></a>
+<span class="sourceLineNo">463</span> altConfig.setInt(HConstants.REGIONSERVER_INFO_PORT, nonDefaultRegionServerPort);<a name="line.463"></a>
+<span class="sourceLineNo">464</span> htu = new HBaseTestingUtility(altConfig);<a name="line.464"></a>
+<span class="sourceLineNo">465</span> try {<a name="line.465"></a>
+<span class="sourceLineNo">466</span> MiniHBaseCluster customCluster = htu.startMiniCluster();<a name="line.466"></a>
+<span class="sourceLineNo">467</span> assertEquals(nonDefaultMasterInfoPort,<a name="line.467"></a>
+<span class="sourceLineNo">468</span> customCluster.getConfiguration().getInt(HConstants.MASTER_INFO_PORT, 0));<a name="line.468"></a>
+<span class="sourceLineNo">469</span> assertEquals(nonDefaultRegionServerPort,<a name="line.469"></a>
+<span class="sourceLineNo">470</span> customCluster.getConfiguration().getInt(HConstants.REGIONSERVER_INFO_PORT, 0));<a name="line.470"></a>
+<span class="sourceLineNo">471</span> } finally {<a name="line.471"></a>
+<span class="sourceLineNo">472</span> htu.shutdownMiniCluster();<a name="line.472"></a>
+<span class="sourceLineNo">473</span> }<a name="line.473"></a>
+<span class="sourceLineNo">474</span> }<a name="line.474"></a>
+<span class="sourceLineNo">475</span><a name="line.475"></a>
+<span class="sourceLineNo">476</span> // This test demonstrates how long killHBTU takes vs. shutdownHBTU takes<a name="line.476"></a>
+<span class="sourceLineNo">477</span> // for realistic results, adjust NUMROWS, NUMTABLES to much larger number.<a name="line.477"></a>
+<span class="sourceLineNo">478</span> @Test<a name="line.478"></a>
+<span class="sourceLineNo">479</span> public void testKillMiniHBaseCluster() throws Exception {<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span> HBaseTestingUtility htu = new HBaseTestingUtility();<a name="line.481"></a>
+<span class="sourceLineNo">482</span> htu.startMiniZKCluster();<a name="line.482"></a>
+<span class="sourceLineNo">483</span><a name="line.483"></a>
+<span class="sourceLineNo">484</span> try {<a name="line.484"></a>
+<span class="sourceLineNo">485</span> htu.startMiniHBaseCluster();<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span> TableName tableName;<a name="line.487"></a>
+<span class="sourceLineNo">488</span> byte[] FAM_NAME;<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span> for(int i = 0; i < NUMTABLES; i++) {<a name="line.490"></a>
+<span class="sourceLineNo">491</span> tableName = TableName.valueOf(name.getMethodName() + i);<a name="line.491"></a>
+<span class="sourceLineNo">492</span> FAM_NAME = Bytes.toBytes("fam" + i);<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span> try (Table table = htu.createMultiRegionTable(tableName, FAM_NAME, NUMREGIONS)) {<a name="line.494"></a>
+<span class="sourceLineNo">495</span> htu.loadRandomRows(table, FAM_NAME, 100, NUMROWS);<a name="line.495"></a>
+<span class="sourceLineNo">496</span> }<a name="line.496"></a>
+<span class="sourceLineNo">497</span> }<a name="line.497"></a>
+<span class="sourceLineNo">498</span> } finally {<a name="line.498"></a>
+<span class="sourceLineNo">499</span> htu.killMiniHBaseCluster();<a name="line.499"></a>
+<span class="sourceLineNo">500</span> htu.shutdownMiniZKCluster();<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>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html
index a5196ae..ba01d9f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestReplicationBase.html
@@ -172,190 +172,194 @@
<span class="sourceLineNo">164</span> }<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span> protected static void loadData(String prefix, byte[] row) throws IOException {<a name="line.166"></a>
-<span class="sourceLineNo">167</span> List<Put> puts = new ArrayList<>(NB_ROWS_IN_BATCH);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> for (int i = 0; i < NB_ROWS_IN_BATCH; i++) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span> Put put = new Put(Bytes.toBytes(prefix + Integer.toString(i)));<a name="line.169"></a>
-<span class="sourceLineNo">170</span> put.addColumn(famName, row, row);<a name="line.170"></a>
-<span class="sourceLineNo">171</span> puts.add(put);<a name="line.171"></a>
-<span class="sourceLineNo">172</span> }<a name="line.172"></a>
-<span class="sourceLineNo">173</span> htable1.put(puts);<a name="line.173"></a>
-<span class="sourceLineNo">174</span> }<a name="line.174"></a>
-<span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span> protected static void configureClusters(){<a name="line.176"></a>
-<span class="sourceLineNo">177</span> conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.177"></a>
-<span class="sourceLineNo">178</span> // We don't want too many edits per batch sent to the ReplicationEndpoint to trigger<a name="line.178"></a>
-<span class="sourceLineNo">179</span> // sufficient number of events. But we don't want to go too low because<a name="line.179"></a>
-<span class="sourceLineNo">180</span> // HBaseInterClusterReplicationEndpoint partitions entries into batches and we want<a name="line.180"></a>
-<span class="sourceLineNo">181</span> // more than one batch sent to the peer cluster for better testing.<a name="line.181"></a>
-<span class="sourceLineNo">182</span> conf1.setInt("replication.source.size.capacity", 102400);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> conf1.setLong("replication.source.sleepforretries", 100);<a name="line.183"></a>
-<span class="sourceLineNo">184</span> conf1.setInt("hbase.regionserver.maxlogs", 10);<a name="line.184"></a>
-<span class="sourceLineNo">185</span> conf1.setLong("hbase.master.logcleaner.ttl", 10);<a name="line.185"></a>
-<span class="sourceLineNo">186</span> conf1.setInt("zookeeper.recovery.retry", 1);<a name="line.186"></a>
-<span class="sourceLineNo">187</span> conf1.setInt("zookeeper.recovery.retry.intervalmill", 10);<a name="line.187"></a>
-<span class="sourceLineNo">188</span> conf1.setLong(HConstants.THREAD_WAKE_FREQUENCY, 100);<a name="line.188"></a>
-<span class="sourceLineNo">189</span> conf1.setInt("replication.stats.thread.period.seconds", 5);<a name="line.189"></a>
-<span class="sourceLineNo">190</span> conf1.setBoolean("hbase.tests.use.shortcircuit.reads", false);<a name="line.190"></a>
-<span class="sourceLineNo">191</span> conf1.setLong("replication.sleep.before.failover", 2000);<a name="line.191"></a>
-<span class="sourceLineNo">192</span> conf1.setInt("replication.source.maxretriesmultiplier", 10);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> conf1.setFloat("replication.source.ratio", 1.0f);<a name="line.193"></a>
-<span class="sourceLineNo">194</span> conf1.setBoolean("replication.source.eof.autorecovery", true);<a name="line.194"></a>
-<span class="sourceLineNo">195</span> conf1.setLong("hbase.serial.replication.waiting.ms", 100);<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span> utility1 = new HBaseTestingUtility(conf1);<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span> // Base conf2 on conf1 so it gets the right zk cluster.<a name="line.199"></a>
-<span class="sourceLineNo">200</span> conf2 = HBaseConfiguration.create(conf1);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.201"></a>
-<span class="sourceLineNo">202</span> conf2.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 6);<a name="line.202"></a>
-<span class="sourceLineNo">203</span> conf2.setBoolean("hbase.tests.use.shortcircuit.reads", false);<a name="line.203"></a>
-<span class="sourceLineNo">204</span><a name="line.204"></a>
-<span class="sourceLineNo">205</span> utility2 = new HBaseTestingUtility(conf2);<a name="line.205"></a>
-<span class="sourceLineNo">206</span> }<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span> protected static void startClusters() throws Exception{<a name="line.208"></a>
-<span class="sourceLineNo">209</span> utility1.startMiniZKCluster();<a name="line.209"></a>
-<span class="sourceLineNo">210</span> MiniZooKeeperCluster miniZK = utility1.getZkCluster();<a name="line.210"></a>
-<span class="sourceLineNo">211</span> // Have to reget conf1 in case zk cluster location different<a name="line.211"></a>
-<span class="sourceLineNo">212</span> // than default<a name="line.212"></a>
-<span class="sourceLineNo">213</span> conf1 = utility1.getConfiguration();<a name="line.213"></a>
-<span class="sourceLineNo">214</span> zkw1 = new ZKWatcher(conf1, "cluster1", null, true);<a name="line.214"></a>
-<span class="sourceLineNo">215</span> admin = new ReplicationAdmin(conf1);<a name="line.215"></a>
-<span class="sourceLineNo">216</span> LOG.info("Setup first Zk");<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span> utility2.setZkCluster(miniZK);<a name="line.218"></a>
-<span class="sourceLineNo">219</span> zkw2 = new ZKWatcher(conf2, "cluster2", null, true);<a name="line.219"></a>
-<span class="sourceLineNo">220</span> LOG.info("Setup second Zk");<a name="line.220"></a>
+<span class="sourceLineNo">167</span> loadData(prefix, row, famName);<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> protected static void loadData(String prefix, byte[] row, byte[] familyName) throws IOException {<a name="line.170"></a>
+<span class="sourceLineNo">171</span> List<Put> puts = new ArrayList<>(NB_ROWS_IN_BATCH);<a name="line.171"></a>
+<span class="sourceLineNo">172</span> for (int i = 0; i < NB_ROWS_IN_BATCH; i++) {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> Put put = new Put(Bytes.toBytes(prefix + Integer.toString(i)));<a name="line.173"></a>
+<span class="sourceLineNo">174</span> put.addColumn(familyName, row, row);<a name="line.174"></a>
+<span class="sourceLineNo">175</span> puts.add(put);<a name="line.175"></a>
+<span class="sourceLineNo">176</span> }<a name="line.176"></a>
+<span class="sourceLineNo">177</span> htable1.put(puts);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span> protected static void configureClusters(){<a name="line.180"></a>
+<span class="sourceLineNo">181</span> conf1.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/1");<a name="line.181"></a>
+<span class="sourceLineNo">182</span> // We don't want too many edits per batch sent to the ReplicationEndpoint to trigger<a name="line.182"></a>
+<span class="sourceLineNo">183</span> // sufficient number of events. But we don't want to go too low because<a name="line.183"></a>
+<span class="sourceLineNo">184</span> // HBaseInterClusterReplicationEndpoint partitions entries into batches and we want<a name="line.184"></a>
+<span class="sourceLineNo">185</span> // more than one batch sent to the peer cluster for better testing.<a name="line.185"></a>
+<span class="sourceLineNo">186</span> conf1.setInt("replication.source.size.capacity", 102400);<a name="line.186"></a>
+<span class="sourceLineNo">187</span> conf1.setLong("replication.source.sleepforretries", 100);<a name="line.187"></a>
+<span class="sourceLineNo">188</span> conf1.setInt("hbase.regionserver.maxlogs", 10);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> conf1.setLong("hbase.master.logcleaner.ttl", 10);<a name="line.189"></a>
+<span class="sourceLineNo">190</span> conf1.setInt("zookeeper.recovery.retry", 1);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> conf1.setInt("zookeeper.recovery.retry.intervalmill", 10);<a name="line.191"></a>
+<span class="sourceLineNo">192</span> conf1.setLong(HConstants.THREAD_WAKE_FREQUENCY, 100);<a name="line.192"></a>
+<span class="sourceLineNo">193</span> conf1.setInt("replication.stats.thread.period.seconds", 5);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> conf1.setBoolean("hbase.tests.use.shortcircuit.reads", false);<a name="line.194"></a>
+<span class="sourceLineNo">195</span> conf1.setLong("replication.sleep.before.failover", 2000);<a name="line.195"></a>
+<span class="sourceLineNo">196</span> conf1.setInt("replication.source.maxretriesmultiplier", 10);<a name="line.196"></a>
+<span class="sourceLineNo">197</span> conf1.setFloat("replication.source.ratio", 1.0f);<a name="line.197"></a>
+<span class="sourceLineNo">198</span> conf1.setBoolean("replication.source.eof.autorecovery", true);<a name="line.198"></a>
+<span class="sourceLineNo">199</span> conf1.setLong("hbase.serial.replication.waiting.ms", 100);<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span> utility1 = new HBaseTestingUtility(conf1);<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span> // Base conf2 on conf1 so it gets the right zk cluster.<a name="line.203"></a>
+<span class="sourceLineNo">204</span> conf2 = HBaseConfiguration.create(conf1);<a name="line.204"></a>
+<span class="sourceLineNo">205</span> conf2.set(HConstants.ZOOKEEPER_ZNODE_PARENT, "/2");<a name="line.205"></a>
+<span class="sourceLineNo">206</span> conf2.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER, 6);<a name="line.206"></a>
+<span class="sourceLineNo">207</span> conf2.setBoolean("hbase.tests.use.shortcircuit.reads", false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span><a name="line.208"></a>
+<span class="sourceLineNo">209</span> utility2 = new HBaseTestingUtility(conf2);<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> protected static void startClusters() throws Exception{<a name="line.212"></a>
+<span class="sourceLineNo">213</span> utility1.startMiniZKCluster();<a name="line.213"></a>
+<span class="sourceLineNo">214</span> MiniZooKeeperCluster miniZK = utility1.getZkCluster();<a name="line.214"></a>
+<span class="sourceLineNo">215</span> // Have to reget conf1 in case zk cluster location different<a name="line.215"></a>
+<span class="sourceLineNo">216</span> // than default<a name="line.216"></a>
+<span class="sourceLineNo">217</span> conf1 = utility1.getConfiguration();<a name="line.217"></a>
+<span class="sourceLineNo">218</span> zkw1 = new ZKWatcher(conf1, "cluster1", null, true);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> admin = new ReplicationAdmin(conf1);<a name="line.219"></a>
+<span class="sourceLineNo">220</span> LOG.info("Setup first Zk");<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span> CONF_WITH_LOCALFS = HBaseConfiguration.create(conf1);<a name="line.222"></a>
-<span class="sourceLineNo">223</span> utility1.startMiniCluster(2);<a name="line.223"></a>
-<span class="sourceLineNo">224</span> // Have a bunch of slave servers, because inter-cluster shipping logic uses number of sinks<a name="line.224"></a>
-<span class="sourceLineNo">225</span> // as a component in deciding maximum number of parallel batches to send to the peer cluster.<a name="line.225"></a>
-<span class="sourceLineNo">226</span> utility2.startMiniCluster(4);<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span> hbaseAdmin = ConnectionFactory.createConnection(conf1).getAdmin();<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span> TableDescriptor table = TableDescriptorBuilder.newBuilder(tableName)<a name="line.230"></a>
-<span class="sourceLineNo">231</span> .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(famName).setMaxVersions(100)<a name="line.231"></a>
-<span class="sourceLineNo">232</span> .setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build())<a name="line.232"></a>
-<span class="sourceLineNo">233</span> .setColumnFamily(ColumnFamilyDescriptorBuilder.of(noRepfamName)).build();<a name="line.233"></a>
-<span class="sourceLineNo">234</span> scopes = new TreeMap<>(Bytes.BYTES_COMPARATOR);<a name="line.234"></a>
-<span class="sourceLineNo">235</span> for (ColumnFamilyDescriptor f : table.getColumnFamilies()) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span> scopes.put(f.getName(), f.getScope());<a name="line.236"></a>
-<span class="sourceLineNo">237</span> }<a name="line.237"></a>
-<span class="sourceLineNo">238</span> Connection connection1 = ConnectionFactory.createConnection(conf1);<a name="line.238"></a>
-<span class="sourceLineNo">239</span> Connection connection2 = ConnectionFactory.createConnection(conf2);<a name="line.239"></a>
-<span class="sourceLineNo">240</span> try (Admin admin1 = connection1.getAdmin()) {<a name="line.240"></a>
-<span class="sourceLineNo">241</span> admin1.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> }<a name="line.242"></a>
-<span class="sourceLineNo">243</span> try (Admin admin2 = connection2.getAdmin()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span> admin2.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.244"></a>
-<span class="sourceLineNo">245</span> }<a name="line.245"></a>
-<span class="sourceLineNo">246</span> utility1.waitUntilAllRegionsAssigned(tableName);<a name="line.246"></a>
-<span class="sourceLineNo">247</span> utility2.waitUntilAllRegionsAssigned(tableName);<a name="line.247"></a>
-<span class="sourceLineNo">248</span> htable1 = connection1.getTable(tableName);<a name="line.248"></a>
-<span class="sourceLineNo">249</span> htable2 = connection2.getTable(tableName);<a name="line.249"></a>
-<span class="sourceLineNo">250</span> }<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span> @BeforeClass<a name="line.252"></a>
-<span class="sourceLineNo">253</span> public static void setUpBeforeClass() throws Exception {<a name="line.253"></a>
-<span class="sourceLineNo">254</span> configureClusters();<a name="line.254"></a>
-<span class="sourceLineNo">255</span> startClusters();<a name="line.255"></a>
-<span class="sourceLineNo">256</span> }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span> private boolean peerExist(String peerId) throws IOException {<a name="line.258"></a>
-<span class="sourceLineNo">259</span> return hbaseAdmin.listReplicationPeers().stream().anyMatch(p -> peerId.equals(p.getPeerId()));<a name="line.259"></a>
+<span class="sourceLineNo">222</span> utility2.setZkCluster(miniZK);<a name="line.222"></a>
+<span class="sourceLineNo">223</span> zkw2 = new ZKWatcher(conf2, "cluster2", null, true);<a name="line.223"></a>
+<span class="sourceLineNo">224</span> LOG.info("Setup second Zk");<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span> CONF_WITH_LOCALFS = HBaseConfiguration.create(conf1);<a name="line.226"></a>
+<span class="sourceLineNo">227</span> utility1.startMiniCluster(2);<a name="line.227"></a>
+<span class="sourceLineNo">228</span> // Have a bunch of slave servers, because inter-cluster shipping logic uses number of sinks<a name="line.228"></a>
+<span class="sourceLineNo">229</span> // as a component in deciding maximum number of parallel batches to send to the peer cluster.<a name="line.229"></a>
+<span class="sourceLineNo">230</span> utility2.startMiniCluster(4);<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span> hbaseAdmin = ConnectionFactory.createConnection(conf1).getAdmin();<a name="line.232"></a>
+<span class="sourceLineNo">233</span><a name="line.233"></a>
+<span class="sourceLineNo">234</span> TableDescriptor table = TableDescriptorBuilder.newBuilder(tableName)<a name="line.234"></a>
+<span class="sourceLineNo">235</span> .setColumnFamily(ColumnFamilyDescriptorBuilder.newBuilder(famName).setMaxVersions(100)<a name="line.235"></a>
+<span class="sourceLineNo">236</span> .setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build())<a name="line.236"></a>
+<span class="sourceLineNo">237</span> .setColumnFamily(ColumnFamilyDescriptorBuilder.of(noRepfamName)).build();<a name="line.237"></a>
+<span class="sourceLineNo">238</span> scopes = new TreeMap<>(Bytes.BYTES_COMPARATOR);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> for (ColumnFamilyDescriptor f : table.getColumnFamilies()) {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> scopes.put(f.getName(), f.getScope());<a name="line.240"></a>
+<span class="sourceLineNo">241</span> }<a name="line.241"></a>
+<span class="sourceLineNo">242</span> Connection connection1 = ConnectionFactory.createConnection(conf1);<a name="line.242"></a>
+<span class="sourceLineNo">243</span> Connection connection2 = ConnectionFactory.createConnection(conf2);<a name="line.243"></a>
+<span class="sourceLineNo">244</span> try (Admin admin1 = connection1.getAdmin()) {<a name="line.244"></a>
+<span class="sourceLineNo">245</span> admin1.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.245"></a>
+<span class="sourceLineNo">246</span> }<a name="line.246"></a>
+<span class="sourceLineNo">247</span> try (Admin admin2 = connection2.getAdmin()) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span> admin2.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.248"></a>
+<span class="sourceLineNo">249</span> }<a name="line.249"></a>
+<span class="sourceLineNo">250</span> utility1.waitUntilAllRegionsAssigned(tableName);<a name="line.250"></a>
+<span class="sourceLineNo">251</span> utility2.waitUntilAllRegionsAssigned(tableName);<a name="line.251"></a>
+<span class="sourceLineNo">252</span> htable1 = connection1.getTable(tableName);<a name="line.252"></a>
+<span class="sourceLineNo">253</span> htable2 = connection2.getTable(tableName);<a name="line.253"></a>
+<span class="sourceLineNo">254</span> }<a name="line.254"></a>
+<span class="sourceLineNo">255</span><a name="line.255"></a>
+<span class="sourceLineNo">256</span> @BeforeClass<a name="line.256"></a>
+<span class="sourceLineNo">257</span> public static void setUpBeforeClass() throws Exception {<a name="line.257"></a>
+<span class="sourceLineNo">258</span> configureClusters();<a name="line.258"></a>
+<span class="sourceLineNo">259</span> startClusters();<a name="line.259"></a>
<span class="sourceLineNo">260</span> }<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span> @Before<a name="line.262"></a>
-<span class="sourceLineNo">263</span> public void setUpBase() throws Exception {<a name="line.263"></a>
-<span class="sourceLineNo">264</span> if (!peerExist(PEER_ID2)) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span> ReplicationPeerConfigBuilder builder = ReplicationPeerConfig.newBuilder()<a name="line.265"></a>
-<span class="sourceLineNo">266</span> .setClusterKey(utility2.getClusterKey()).setSerial(isSerialPeer());<a name="line.266"></a>
-<span class="sourceLineNo">267</span> if (isSyncPeer()) {<a name="line.267"></a>
-<span class="sourceLineNo">268</span> FileSystem fs2 = utility2.getTestFileSystem();<a name="line.268"></a>
-<span class="sourceLineNo">269</span> // The remote wal dir is not important as we do not use it in DA state, here we only need to<a name="line.269"></a>
-<span class="sourceLineNo">270</span> // confirm that a sync peer in DA state can still replicate data to remote cluster<a name="line.270"></a>
-<span class="sourceLineNo">271</span> // asynchronously.<a name="line.271"></a>
-<span class="sourceLineNo">272</span> builder.setReplicateAllUserTables(false)<a name="line.272"></a>
-<span class="sourceLineNo">273</span> .setTableCFsMap(ImmutableMap.of(tableName, ImmutableList.of()))<a name="line.273"></a>
-<span class="sourceLineNo">274</span> .setRemoteWALDir(new Path("/RemoteWAL")<a name="line.274"></a>
-<span class="sourceLineNo">275</span> .makeQualified(fs2.getUri(), fs2.getWorkingDirectory()).toUri().toString());<a name="line.275"></a>
-<span class="sourceLineNo">276</span> }<a name="line.276"></a>
-<span class="sourceLineNo">277</span> hbaseAdmin.addReplicationPeer(PEER_ID2, builder.build());<a name="line.277"></a>
-<span class="sourceLineNo">278</span> }<a name="line.278"></a>
-<span class="sourceLineNo">279</span> }<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span> @After<a name="line.281"></a>
-<span class="sourceLineNo">282</span> public void tearDownBase() throws Exception {<a name="line.282"></a>
-<span class="sourceLineNo">283</span> if (peerExist(PEER_ID2)) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span> hbaseAdmin.removeReplicationPeer(PEER_ID2);<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><a name="line.287"></a>
-<span class="sourceLineNo">288</span> protected static void runSimplePutDeleteTest() throws IOException, InterruptedException {<a name="line.288"></a>
-<span class="sourceLineNo">289</span> Put put = new Put(row);<a name="line.289"></a>
-<span class="sourceLineNo">290</span> put.addColumn(famName, row, row);<a name="line.290"></a>
+<span class="sourceLineNo">262</span> private boolean peerExist(String peerId) throws IOException {<a name="line.262"></a>
+<span class="sourceLineNo">263</span> return hbaseAdmin.listReplicationPeers().stream().anyMatch(p -> peerId.equals(p.getPeerId()));<a name="line.263"></a>
+<span class="sourceLineNo">264</span> }<a name="line.264"></a>
+<span class="sourceLineNo">265</span><a name="line.265"></a>
+<span class="sourceLineNo">266</span> @Before<a name="line.266"></a>
+<span class="sourceLineNo">267</span> public void setUpBase() throws Exception {<a name="line.267"></a>
+<span class="sourceLineNo">268</span> if (!peerExist(PEER_ID2)) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span> ReplicationPeerConfigBuilder builder = ReplicationPeerConfig.newBuilder()<a name="line.269"></a>
+<span class="sourceLineNo">270</span> .setClusterKey(utility2.getClusterKey()).setSerial(isSerialPeer());<a name="line.270"></a>
+<span class="sourceLineNo">271</span> if (isSyncPeer()) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> FileSystem fs2 = utility2.getTestFileSystem();<a name="line.272"></a>
+<span class="sourceLineNo">273</span> // The remote wal dir is not important as we do not use it in DA state, here we only need to<a name="line.273"></a>
+<span class="sourceLineNo">274</span> // confirm that a sync peer in DA state can still replicate data to remote cluster<a name="line.274"></a>
+<span class="sourceLineNo">275</span> // asynchronously.<a name="line.275"></a>
+<span class="sourceLineNo">276</span> builder.setReplicateAllUserTables(false)<a name="line.276"></a>
+<span class="sourceLineNo">277</span> .setTableCFsMap(ImmutableMap.of(tableName, ImmutableList.of()))<a name="line.277"></a>
+<span class="sourceLineNo">278</span> .setRemoteWALDir(new Path("/RemoteWAL")<a name="line.278"></a>
+<span class="sourceLineNo">279</span> .makeQualified(fs2.getUri(), fs2.getWorkingDirectory()).toUri().toString());<a name="line.279"></a>
+<span class="sourceLineNo">280</span> }<a name="line.280"></a>
+<span class="sourceLineNo">281</span> hbaseAdmin.addReplicationPeer(PEER_ID2, builder.build());<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> @After<a name="line.285"></a>
+<span class="sourceLineNo">286</span> public void tearDownBase() throws Exception {<a name="line.286"></a>
+<span class="sourceLineNo">287</span> if (peerExist(PEER_ID2)) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span> hbaseAdmin.removeReplicationPeer(PEER_ID2);<a name="line.288"></a>
+<span class="sourceLineNo">289</span> }<a name="line.289"></a>
+<span class="sourceLineNo">290</span> }<a name="line.290"></a>
<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span> htable1 = utility1.getConnection().getTable(tableName);<a name="line.292"></a>
-<span class="sourceLineNo">293</span> htable1.put(put);<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span> Get get = new Get(row);<a name="line.295"></a>
-<span class="sourceLineNo">296</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.296"></a>
-<span class="sourceLineNo">297</span> if (i == NB_RETRIES - 1) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span> fail("Waited too much time for put replication");<a name="line.298"></a>
-<span class="sourceLineNo">299</span> }<a name="line.299"></a>
-<span class="sourceLineNo">300</span> Result res = htable2.get(get);<a name="line.300"></a>
-<span class="sourceLineNo">301</span> if (res.isEmpty()) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span> LOG.info("Row not available");<a name="line.302"></a>
-<span class="sourceLineNo">303</span> Thread.sleep(SLEEP_TIME);<a name="line.303"></a>
-<span class="sourceLineNo">304</span> } else {<a name="line.304"></a>
-<span class="sourceLineNo">305</span> assertArrayEquals(row, res.value());<a name="line.305"></a>
-<span class="sourceLineNo">306</span> break;<a name="line.306"></a>
-<span class="sourceLineNo">307</span> }<a name="line.307"></a>
-<span class="sourceLineNo">308</span> }<a name="line.308"></a>
-<span class="sourceLineNo">309</span><a name="line.309"></a>
-<span class="sourceLineNo">310</span> Delete del = new Delete(row);<a name="line.310"></a>
-<span class="sourceLineNo">311</span> htable1.delete(del);<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span> get = new Get(row);<a name="line.313"></a>
-<span class="sourceLineNo">314</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span> if (i == NB_RETRIES - 1) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span> fail("Waited too much time for del replication");<a name="line.316"></a>
-<span class="sourceLineNo">317</span> }<a name="line.317"></a>
-<span class="sourceLineNo">318</span> Result res = htable2.get(get);<a name="line.318"></a>
-<span class="sourceLineNo">319</span> if (res.size() >= 1) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span> LOG.info("Row not deleted");<a name="line.320"></a>
-<span class="sourceLineNo">321</span> Thread.sleep(SLEEP_TIME);<a name="line.321"></a>
-<span class="sourceLineNo">322</span> } else {<a name="line.322"></a>
-<span class="sourceLineNo">323</span> break;<a name="line.323"></a>
-<span class="sourceLineNo">324</span> }<a name="line.324"></a>
-<span class="sourceLineNo">325</span> }<a name="line.325"></a>
-<span class="sourceLineNo">326</span> }<a name="line.326"></a>
-<span class="sourceLineNo">327</span><a name="line.327"></a>
-<span class="sourceLineNo">328</span> protected static void runSmallBatchTest() throws IOException, InterruptedException {<a name="line.328"></a>
-<span class="sourceLineNo">329</span> // normal Batch tests<a name="line.329"></a>
-<span class="sourceLineNo">330</span> loadData("", row);<a name="line.330"></a>
+<span class="sourceLineNo">292</span> protected static void runSimplePutDeleteTest() throws IOException, InterruptedException {<a name="line.292"></a>
+<span class="sourceLineNo">293</span> Put put = new Put(row);<a name="line.293"></a>
+<span class="sourceLineNo">294</span> put.addColumn(famName, row, row);<a name="line.294"></a>
+<span class="sourceLineNo">295</span><a name="line.295"></a>
+<span class="sourceLineNo">296</span> htable1 = utility1.getConnection().getTable(tableName);<a name="line.296"></a>
+<span class="sourceLineNo">297</span> htable1.put(put);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span> Get get = new Get(row);<a name="line.299"></a>
+<span class="sourceLineNo">300</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span> if (i == NB_RETRIES - 1) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span> fail("Waited too much time for put replication");<a name="line.302"></a>
+<span class="sourceLineNo">303</span> }<a name="line.303"></a>
+<span class="sourceLineNo">304</span> Result res = htable2.get(get);<a name="line.304"></a>
+<span class="sourceLineNo">305</span> if (res.isEmpty()) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span> LOG.info("Row not available");<a name="line.306"></a>
+<span class="sourceLineNo">307</span> Thread.sleep(SLEEP_TIME);<a name="line.307"></a>
+<span class="sourceLineNo">308</span> } else {<a name="line.308"></a>
+<span class="sourceLineNo">309</span> assertArrayEquals(row, res.value());<a name="line.309"></a>
+<span class="sourceLineNo">310</span> break;<a name="line.310"></a>
+<span class="sourceLineNo">311</span> }<a name="line.311"></a>
+<span class="sourceLineNo">312</span> }<a name="line.312"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span> Delete del = new Delete(row);<a name="line.314"></a>
+<span class="sourceLineNo">315</span> htable1.delete(del);<a name="line.315"></a>
+<span class="sourceLineNo">316</span><a name="line.316"></a>
+<span class="sourceLineNo">317</span> get = new Get(row);<a name="line.317"></a>
+<span class="sourceLineNo">318</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span> if (i == NB_RETRIES - 1) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span> fail("Waited too much time for del replication");<a name="line.320"></a>
+<span class="sourceLineNo">321</span> }<a name="line.321"></a>
+<span class="sourceLineNo">322</span> Result res = htable2.get(get);<a name="line.322"></a>
+<span class="sourceLineNo">323</span> if (res.size() >= 1) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span> LOG.info("Row not deleted");<a name="line.324"></a>
+<span class="sourceLineNo">325</span> Thread.sleep(SLEEP_TIME);<a name="line.325"></a>
+<span class="sourceLineNo">326</span> } else {<a name="line.326"></a>
+<span class="sourceLineNo">327</span> break;<a name="line.327"></a>
+<span class="sourceLineNo">328</span> }<a name="line.328"></a>
+<span class="sourceLineNo">329</span> }<a name="line.329"></a>
+<span class="sourceLineNo">330</span> }<a name="line.330"></a>
<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span> Scan scan = new Scan();<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span> ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.334"></a>
-<span class="sourceLineNo">335</span> Result[] res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.335"></a>
-<span class="sourceLineNo">336</span> scanner1.close();<a name="line.336"></a>
-<span class="sourceLineNo">337</span> assertEquals(NB_ROWS_IN_BATCH, res1.length);<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span> waitForReplication(NB_ROWS_IN_BATCH, NB_RETRIES);<a name="line.339"></a>
-<span class="sourceLineNo">340</span> }<a name="line.340"></a>
-<span class="sourceLineNo">341</span><a name="line.341"></a>
-<span class="sourceLineNo">342</span> @AfterClass<a name="line.342"></a>
-<span class="sourceLineNo">343</span> public static void tearDownAfterClass() throws Exception {<a name="line.343"></a>
-<span class="sourceLineNo">344</span> htable2.close();<a name="line.344"></a>
-<span class="sourceLineNo">345</span> htable1.close();<a name="line.345"></a>
-<span class="sourceLineNo">346</span> admin.close();<a name="line.346"></a>
-<span class="sourceLineNo">347</span> utility2.shutdownMiniCluster();<a name="line.347"></a>
-<span class="sourceLineNo">348</span> utility1.shutdownMiniCluster();<a name="line.348"></a>
-<span class="sourceLineNo">349</span> }<a name="line.349"></a>
-<span class="sourceLineNo">350</span>}<a name="line.350"></a>
+<span class="sourceLineNo">332</span> protected static void runSmallBatchTest() throws IOException, InterruptedException {<a name="line.332"></a>
+<span class="sourceLineNo">333</span> // normal Batch tests<a name="line.333"></a>
+<span class="sourceLineNo">334</span> loadData("", row);<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span> Scan scan = new Scan();<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span> ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> Result[] res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.339"></a>
+<span class="sourceLineNo">340</span> scanner1.close();<a name="line.340"></a>
+<span class="sourceLineNo">341</span> assertEquals(NB_ROWS_IN_BATCH, res1.length);<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span> waitForReplication(NB_ROWS_IN_BATCH, NB_RETRIES);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> }<a name="line.344"></a>
+<span class="sourceLineNo">345</span><a name="line.345"></a>
+<span class="sourceLineNo">346</span> @AfterClass<a name="line.346"></a>
+<span class="sourceLineNo">347</span> public static void tearDownAfterClass() throws Exception {<a name="line.347"></a>
+<span class="sourceLineNo">348</span> htable2.close();<a name="line.348"></a>
+<span class="sourceLineNo">349</span> htable1.close();<a name="line.349"></a>
+<span class="sourceLineNo">350</span> admin.close();<a name="line.350"></a>
+<span class="sourceLineNo">351</span> utility2.shutdownMiniCluster();<a name="line.351"></a>
+<span class="sourceLineNo">352</span> utility1.shutdownMiniCluster();<a name="line.352"></a>
+<span class="sourceLineNo">353</span> }<a name="line.353"></a>
+<span class="sourceLineNo">354</span>}<a name="line.354"></a>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html
index 64bd0f1..f939e14 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/TestVerifyReplication.html
@@ -33,543 +33,679 @@
<span class="sourceLineNo">025</span>import static org.junit.Assert.fail;<a name="line.25"></a>
<span class="sourceLineNo">026</span><a name="line.26"></a>
<span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.TreeMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.conf.Configuration;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.FileStatus;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.fs.FileSystem;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.fs.Path;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.Cell;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HConstants;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.TableName;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Get;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Put;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Result;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.Table;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.mapreduce.Job;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.junit.Before;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.junit.ClassRule;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.junit.Rule;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.junit.Test;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.junit.experimental.categories.Category;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.rules.TestName;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.slf4j.Logger;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.slf4j.LoggerFactory;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>@Category({ ReplicationTests.class, LargeTests.class })<a name="line.71"></a>
-<span class="sourceLineNo">072</span>public class TestVerifyReplication extends TestReplicationBase {<a name="line.72"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.List;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.TreeMap;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.fs.FileStatus;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.TableName;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.ConnectionFactory;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.client.Delete;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.client.Get;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Put;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.client.Result;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.client.Table;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.client.TableDescriptor;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.client.TableDescriptorBuilder;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.util.FSUtils;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.mapreduce.Job;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.junit.AfterClass;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.junit.Before;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.junit.BeforeClass;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.junit.ClassRule;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.junit.Rule;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.Test;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.experimental.categories.Category;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.rules.TestName;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span> @ClassRule<a name="line.74"></a>
-<span class="sourceLineNo">075</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.75"></a>
-<span class="sourceLineNo">076</span> HBaseClassTestRule.forClass(TestVerifyReplication.class);<a name="line.76"></a>
-<span class="sourceLineNo">077</span><a name="line.77"></a>
-<span class="sourceLineNo">078</span> private static final Logger LOG = LoggerFactory.getLogger(TestVerifyReplication.class);<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span> private static final String PEER_ID = "2";<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span> @Rule<a name="line.82"></a>
-<span class="sourceLineNo">083</span> public TestName name = new TestName();<a name="line.83"></a>
+<span class="sourceLineNo">074</span>import org.apache.hbase.thirdparty.com.google.common.collect.Lists;<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>@Category({ ReplicationTests.class, LargeTests.class })<a name="line.76"></a>
+<span class="sourceLineNo">077</span>public class TestVerifyReplication extends TestReplicationBase {<a name="line.77"></a>
+<span class="sourceLineNo">078</span><a name="line.78"></a>
+<span class="sourceLineNo">079</span> @ClassRule<a name="line.79"></a>
+<span class="sourceLineNo">080</span> public static final HBaseClassTestRule CLASS_RULE =<a name="line.80"></a>
+<span class="sourceLineNo">081</span> HBaseClassTestRule.forClass(TestVerifyReplication.class);<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span> private static final Logger LOG = LoggerFactory.getLogger(TestVerifyReplication.class);<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span> @Before<a name="line.85"></a>
-<span class="sourceLineNo">086</span> public void setUp() throws Exception {<a name="line.86"></a>
-<span class="sourceLineNo">087</span> cleanUp();<a name="line.87"></a>
-<span class="sourceLineNo">088</span> }<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span> private void runVerifyReplication(String[] args, int expectedGoodRows, int expectedBadRows)<a name="line.90"></a>
-<span class="sourceLineNo">091</span> throws IOException, InterruptedException, ClassNotFoundException {<a name="line.91"></a>
-<span class="sourceLineNo">092</span> Job job = new VerifyReplication().createSubmittableJob(new Configuration(conf1), args);<a name="line.92"></a>
-<span class="sourceLineNo">093</span> if (job == null) {<a name="line.93"></a>
-<span class="sourceLineNo">094</span> fail("Job wasn't created, see the log");<a name="line.94"></a>
-<span class="sourceLineNo">095</span> }<a name="line.95"></a>
-<span class="sourceLineNo">096</span> if (!job.waitForCompletion(true)) {<a name="line.96"></a>
-<span class="sourceLineNo">097</span> fail("Job failed, see the log");<a name="line.97"></a>
-<span class="sourceLineNo">098</span> }<a name="line.98"></a>
-<span class="sourceLineNo">099</span> assertEquals(expectedGoodRows,<a name="line.99"></a>
-<span class="sourceLineNo">100</span> job.getCounters().findCounter(VerifyReplication.Verifier.Counters.GOODROWS).getValue());<a name="line.100"></a>
-<span class="sourceLineNo">101</span> assertEquals(expectedBadRows,<a name="line.101"></a>
-<span class="sourceLineNo">102</span> job.getCounters().findCounter(VerifyReplication.Verifier.Counters.BADROWS).getValue());<a name="line.102"></a>
-<span class="sourceLineNo">103</span> }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span> /**<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * Do a small loading into a table, make sure the data is really the same, then run the<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * VerifyReplication job to check the results. Do a second comparison where all the cells are<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * different.<a name="line.108"></a>
-<span class="sourceLineNo">109</span> */<a name="line.109"></a>
-<span class="sourceLineNo">110</span> @Test<a name="line.110"></a>
-<span class="sourceLineNo">111</span> public void testVerifyRepJob() throws Exception {<a name="line.111"></a>
-<span class="sourceLineNo">112</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.112"></a>
-<span class="sourceLineNo">113</span> // identical since it does the check<a name="line.113"></a>
-<span class="sourceLineNo">114</span> runSmallBatchTest();<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span> String[] args = new String[] { PEER_ID, tableName.getNameAsString() };<a name="line.116"></a>
-<span class="sourceLineNo">117</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span> Scan scan = new Scan();<a name="line.119"></a>
-<span class="sourceLineNo">120</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.120"></a>
-<span class="sourceLineNo">121</span> Put put = null;<a name="line.121"></a>
-<span class="sourceLineNo">122</span> for (Result result : rs) {<a name="line.122"></a>
-<span class="sourceLineNo">123</span> put = new Put(result.getRow());<a name="line.123"></a>
-<span class="sourceLineNo">124</span> Cell firstVal = result.rawCells()[0];<a name="line.124"></a>
-<span class="sourceLineNo">125</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.125"></a>
-<span class="sourceLineNo">126</span> Bytes.toBytes("diff data"));<a name="line.126"></a>
-<span class="sourceLineNo">127</span> htable2.put(put);<a name="line.127"></a>
-<span class="sourceLineNo">128</span> }<a name="line.128"></a>
-<span class="sourceLineNo">129</span> Delete delete = new Delete(put.getRow());<a name="line.129"></a>
-<span class="sourceLineNo">130</span> htable2.delete(delete);<a name="line.130"></a>
-<span class="sourceLineNo">131</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.131"></a>
-<span class="sourceLineNo">132</span> }<a name="line.132"></a>
-<span class="sourceLineNo">133</span><a name="line.133"></a>
-<span class="sourceLineNo">134</span> /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span> * Load a row into a table, make sure the data is really the same, delete the row, make sure the<a name="line.135"></a>
-<span class="sourceLineNo">136</span> * delete marker is replicated, run verify replication with and without raw to check the results.<a name="line.136"></a>
-<span class="sourceLineNo">137</span> */<a name="line.137"></a>
-<span class="sourceLineNo">138</span> @Test<a name="line.138"></a>
-<span class="sourceLineNo">139</span> public void testVerifyRepJobWithRawOptions() throws Exception {<a name="line.139"></a>
-<span class="sourceLineNo">140</span> LOG.info(name.getMethodName());<a name="line.140"></a>
+<span class="sourceLineNo">085</span> private static final String PEER_ID = "2";<a name="line.85"></a>
+<span class="sourceLineNo">086</span> private static final TableName peerTableName = TableName.valueOf("peerTest");<a name="line.86"></a>
+<span class="sourceLineNo">087</span> private static Table htable3;<a name="line.87"></a>
+<span class="sourceLineNo">088</span><a name="line.88"></a>
+<span class="sourceLineNo">089</span> @Rule<a name="line.89"></a>
+<span class="sourceLineNo">090</span> public TestName name = new TestName();<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span> @Before<a name="line.92"></a>
+<span class="sourceLineNo">093</span> public void setUp() throws Exception {<a name="line.93"></a>
+<span class="sourceLineNo">094</span> cleanUp();<a name="line.94"></a>
+<span class="sourceLineNo">095</span> utility2.deleteTableData(peerTableName);<a name="line.95"></a>
+<span class="sourceLineNo">096</span> }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span> @BeforeClass<a name="line.98"></a>
+<span class="sourceLineNo">099</span> public static void setUpBeforeClass() throws Exception {<a name="line.99"></a>
+<span class="sourceLineNo">100</span> TestReplicationBase.setUpBeforeClass();<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span> TableDescriptor peerTable = TableDescriptorBuilder.newBuilder(peerTableName).setColumnFamily(<a name="line.102"></a>
+<span class="sourceLineNo">103</span> ColumnFamilyDescriptorBuilder.newBuilder(noRepfamName).setMaxVersions(100)<a name="line.103"></a>
+<span class="sourceLineNo">104</span> .build()).build();<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span> Connection connection2 = ConnectionFactory.createConnection(conf2);<a name="line.106"></a>
+<span class="sourceLineNo">107</span> try (Admin admin2 = connection2.getAdmin()) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span> admin2.createTable(peerTable, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.108"></a>
+<span class="sourceLineNo">109</span> }<a name="line.109"></a>
+<span class="sourceLineNo">110</span> htable3 = connection2.getTable(peerTableName);<a name="line.110"></a>
+<span class="sourceLineNo">111</span> }<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span> private void runVerifyReplication(String[] args, int expectedGoodRows, int expectedBadRows)<a name="line.113"></a>
+<span class="sourceLineNo">114</span> throws IOException, InterruptedException, ClassNotFoundException {<a name="line.114"></a>
+<span class="sourceLineNo">115</span> Job job = new VerifyReplication().createSubmittableJob(new Configuration(conf1), args);<a name="line.115"></a>
+<span class="sourceLineNo">116</span> if (job == null) {<a name="line.116"></a>
+<span class="sourceLineNo">117</span> fail("Job wasn't created, see the log");<a name="line.117"></a>
+<span class="sourceLineNo">118</span> }<a name="line.118"></a>
+<span class="sourceLineNo">119</span> if (!job.waitForCompletion(true)) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span> fail("Job failed, see the log");<a name="line.120"></a>
+<span class="sourceLineNo">121</span> }<a name="line.121"></a>
+<span class="sourceLineNo">122</span> assertEquals(expectedGoodRows,<a name="line.122"></a>
+<span class="sourceLineNo">123</span> job.getCounters().findCounter(VerifyReplication.Verifier.Counters.GOODROWS).getValue());<a name="line.123"></a>
+<span class="sourceLineNo">124</span> assertEquals(expectedBadRows,<a name="line.124"></a>
+<span class="sourceLineNo">125</span> job.getCounters().findCounter(VerifyReplication.Verifier.Counters.BADROWS).getValue());<a name="line.125"></a>
+<span class="sourceLineNo">126</span> }<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span> /**<a name="line.128"></a>
+<span class="sourceLineNo">129</span> * Do a small loading into a table, make sure the data is really the same, then run the<a name="line.129"></a>
+<span class="sourceLineNo">130</span> * VerifyReplication job to check the results. Do a second comparison where all the cells are<a name="line.130"></a>
+<span class="sourceLineNo">131</span> * different.<a name="line.131"></a>
+<span class="sourceLineNo">132</span> */<a name="line.132"></a>
+<span class="sourceLineNo">133</span> @Test<a name="line.133"></a>
+<span class="sourceLineNo">134</span> public void testVerifyRepJob() throws Exception {<a name="line.134"></a>
+<span class="sourceLineNo">135</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.135"></a>
+<span class="sourceLineNo">136</span> // identical since it does the check<a name="line.136"></a>
+<span class="sourceLineNo">137</span> runSmallBatchTest();<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span> String[] args = new String[] { PEER_ID, tableName.getNameAsString() };<a name="line.139"></a>
+<span class="sourceLineNo">140</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.140"></a>
<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.142"></a>
-<span class="sourceLineNo">143</span> byte[] familyname = Bytes.toBytes("fam_raw");<a name="line.143"></a>
-<span class="sourceLineNo">144</span> byte[] row = Bytes.toBytes("row_raw");<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span> Table lHtable1 = null;<a name="line.146"></a>
-<span class="sourceLineNo">147</span> Table lHtable2 = null;<a name="line.147"></a>
-<span class="sourceLineNo">148</span><a name="line.148"></a>
-<span class="sourceLineNo">149</span> try {<a name="line.149"></a>
-<span class="sourceLineNo">150</span> ColumnFamilyDescriptor fam = ColumnFamilyDescriptorBuilder.newBuilder(familyname)<a name="line.150"></a>
-<span class="sourceLineNo">151</span> .setMaxVersions(100).setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build();<a name="line.151"></a>
-<span class="sourceLineNo">152</span> TableDescriptor table =<a name="line.152"></a>
-<span class="sourceLineNo">153</span> TableDescriptorBuilder.newBuilder(tableName).setColumnFamily(fam).build();<a name="line.153"></a>
-<span class="sourceLineNo">154</span> scopes = new TreeMap<>(Bytes.BYTES_COMPARATOR);<a name="line.154"></a>
-<span class="sourceLineNo">155</span> for (ColumnFamilyDescriptor f : table.getColumnFamilies()) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span> scopes.put(f.getName(), f.getScope());<a name="line.156"></a>
-<span class="sourceLineNo">157</span> }<a name="line.157"></a>
-<span class="sourceLineNo">158</span><a name="line.158"></a>
-<span class="sourceLineNo">159</span> Connection connection1 = ConnectionFactory.createConnection(conf1);<a name="line.159"></a>
-<span class="sourceLineNo">160</span> Connection connection2 = ConnectionFactory.createConnection(conf2);<a name="line.160"></a>
-<span class="sourceLineNo">161</span> try (Admin admin1 = connection1.getAdmin()) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span> admin1.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.162"></a>
-<span class="sourceLineNo">163</span> }<a name="line.163"></a>
-<span class="sourceLineNo">164</span> try (Admin admin2 = connection2.getAdmin()) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span> admin2.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.165"></a>
-<span class="sourceLineNo">166</span> }<a name="line.166"></a>
-<span class="sourceLineNo">167</span> utility1.waitUntilAllRegionsAssigned(tableName);<a name="line.167"></a>
-<span class="sourceLineNo">168</span> utility2.waitUntilAllRegionsAssigned(tableName);<a name="line.168"></a>
-<span class="sourceLineNo">169</span><a name="line.169"></a>
-<span class="sourceLineNo">170</span> lHtable1 = utility1.getConnection().getTable(tableName);<a name="line.170"></a>
-<span class="sourceLineNo">171</span> lHtable2 = utility2.getConnection().getTable(tableName);<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span> Put put = new Put(row);<a name="line.173"></a>
-<span class="sourceLineNo">174</span> put.addColumn(familyname, row, row);<a name="line.174"></a>
-<span class="sourceLineNo">175</span> lHtable1.put(put);<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span> Get get = new Get(row);<a name="line.177"></a>
-<span class="sourceLineNo">178</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span> if (i == NB_RETRIES - 1) {<a name="line.179"></a>
-<span class="sourceLineNo">180</span> fail("Waited too much time for put replication");<a name="line.180"></a>
-<span class="sourceLineNo">181</span> }<a name="line.181"></a>
-<span class="sourceLineNo">182</span> Result res = lHtable2.get(get);<a name="line.182"></a>
-<span class="sourceLineNo">183</span> if (res.isEmpty()) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span> LOG.info("Row not available");<a name="line.184"></a>
-<span class="sourceLineNo">185</span> Thread.sleep(SLEEP_TIME);<a name="line.185"></a>
-<span class="sourceLineNo">186</span> } else {<a name="line.186"></a>
-<span class="sourceLineNo">187</span> assertArrayEquals(res.value(), row);<a name="line.187"></a>
-<span class="sourceLineNo">188</span> break;<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">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span> Delete del = new Delete(row);<a name="line.192"></a>
-<span class="sourceLineNo">193</span> lHtable1.delete(del);<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span> get = new Get(row);<a name="line.195"></a>
-<span class="sourceLineNo">196</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span> if (i == NB_RETRIES - 1) {<a name="line.197"></a>
-<span class="sourceLineNo">198</span> fail("Waited too much time for del replication");<a name="line.198"></a>
-<span class="sourceLineNo">199</span> }<a name="line.199"></a>
-<span class="sourceLineNo">200</span> Result res = lHtable2.get(get);<a name="line.200"></a>
-<span class="sourceLineNo">201</span> if (res.size() >= 1) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span> LOG.info("Row not deleted");<a name="line.202"></a>
-<span class="sourceLineNo">203</span> Thread.sleep(SLEEP_TIME);<a name="line.203"></a>
-<span class="sourceLineNo">204</span> } else {<a name="line.204"></a>
-<span class="sourceLineNo">205</span> break;<a name="line.205"></a>
-<span class="sourceLineNo">206</span> }<a name="line.206"></a>
-<span class="sourceLineNo">207</span> }<a name="line.207"></a>
-<span class="sourceLineNo">208</span><a name="line.208"></a>
-<span class="sourceLineNo">209</span> // Checking verifyReplication for the default behavior.<a name="line.209"></a>
-<span class="sourceLineNo">210</span> String[] argsWithoutRaw = new String[] { PEER_ID, tableName.getNameAsString() };<a name="line.210"></a>
-<span class="sourceLineNo">211</span> runVerifyReplication(argsWithoutRaw, 0, 0);<a name="line.211"></a>
-<span class="sourceLineNo">212</span><a name="line.212"></a>
-<span class="sourceLineNo">213</span> // Checking verifyReplication with raw<a name="line.213"></a>
-<span class="sourceLineNo">214</span> String[] argsWithRawAsTrue = new String[] { "--raw", PEER_ID, tableName.getNameAsString() };<a name="line.214"></a>
-<span class="sourceLineNo">215</span> runVerifyReplication(argsWithRawAsTrue, 1, 0);<a name="line.215"></a>
-<span class="sourceLineNo">216</span> } finally {<a name="line.216"></a>
-<span class="sourceLineNo">217</span> if (lHtable1 != null) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span> lHtable1.close();<a name="line.218"></a>
-<span class="sourceLineNo">219</span> }<a name="line.219"></a>
-<span class="sourceLineNo">220</span> if (lHtable2 != null) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span> lHtable2.close();<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> // VerifyReplication should honor versions option<a name="line.226"></a>
-<span class="sourceLineNo">227</span> @Test<a name="line.227"></a>
-<span class="sourceLineNo">228</span> public void testHBase14905() throws Exception {<a name="line.228"></a>
-<span class="sourceLineNo">229</span> // normal Batch tests<a name="line.229"></a>
-<span class="sourceLineNo">230</span> byte[] qualifierName = Bytes.toBytes("f1");<a name="line.230"></a>
-<span class="sourceLineNo">231</span> Put put = new Put(Bytes.toBytes("r1"));<a name="line.231"></a>
-<span class="sourceLineNo">232</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1002"));<a name="line.232"></a>
-<span class="sourceLineNo">233</span> htable1.put(put);<a name="line.233"></a>
-<span class="sourceLineNo">234</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1001"));<a name="line.234"></a>
-<span class="sourceLineNo">235</span> htable1.put(put);<a name="line.235"></a>
-<span class="sourceLineNo">236</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1112"));<a name="line.236"></a>
-<span class="sourceLineNo">237</span> htable1.put(put);<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span> Scan scan = new Scan();<a name="line.239"></a>
-<span class="sourceLineNo">240</span> scan.readVersions(100);<a name="line.240"></a>
-<span class="sourceLineNo">241</span> ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.241"></a>
-<span class="sourceLineNo">242</span> Result[] res1 = scanner1.next(1);<a name="line.242"></a>
-<span class="sourceLineNo">243</span> scanner1.close();<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span> assertEquals(1, res1.length);<a name="line.245"></a>
-<span class="sourceLineNo">246</span> assertEquals(3, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.246"></a>
-<span class="sourceLineNo">247</span><a name="line.247"></a>
-<span class="sourceLineNo">248</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span> scan = new Scan();<a name="line.249"></a>
-<span class="sourceLineNo">250</span> scan.readVersions(100);<a name="line.250"></a>
-<span class="sourceLineNo">251</span> scanner1 = htable2.getScanner(scan);<a name="line.251"></a>
-<span class="sourceLineNo">252</span> res1 = scanner1.next(1);<a name="line.252"></a>
-<span class="sourceLineNo">253</span> scanner1.close();<a name="line.253"></a>
-<span class="sourceLineNo">254</span> if (res1.length != 1) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span> LOG.info("Only got " + res1.length + " rows");<a name="line.255"></a>
-<span class="sourceLineNo">256</span> Thread.sleep(SLEEP_TIME);<a name="line.256"></a>
-<span class="sourceLineNo">257</span> } else {<a name="line.257"></a>
-<span class="sourceLineNo">258</span> int cellNumber = res1[0].getColumnCells(famName, Bytes.toBytes("f1")).size();<a name="line.258"></a>
-<span class="sourceLineNo">259</span> if (cellNumber != 3) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span> LOG.info("Only got " + cellNumber + " cells");<a name="line.260"></a>
-<span class="sourceLineNo">261</span> Thread.sleep(SLEEP_TIME);<a name="line.261"></a>
-<span class="sourceLineNo">262</span> } else {<a name="line.262"></a>
-<span class="sourceLineNo">263</span> break;<a name="line.263"></a>
-<span class="sourceLineNo">264</span> }<a name="line.264"></a>
-<span class="sourceLineNo">265</span> }<a name="line.265"></a>
-<span class="sourceLineNo">266</span> if (i == NB_RETRIES - 1) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span> fail("Waited too much time for normal batch replication");<a name="line.267"></a>
-<span class="sourceLineNo">268</span> }<a name="line.268"></a>
-<span class="sourceLineNo">269</span> }<a name="line.269"></a>
+<span class="sourceLineNo">142</span> Scan scan = new Scan();<a name="line.142"></a>
+<span class="sourceLineNo">143</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.143"></a>
+<span class="sourceLineNo">144</span> Put put = null;<a name="line.144"></a>
+<span class="sourceLineNo">145</span> for (Result result : rs) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span> put = new Put(result.getRow());<a name="line.146"></a>
+<span class="sourceLineNo">147</span> Cell firstVal = result.rawCells()[0];<a name="line.147"></a>
+<span class="sourceLineNo">148</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.148"></a>
+<span class="sourceLineNo">149</span> Bytes.toBytes("diff data"));<a name="line.149"></a>
+<span class="sourceLineNo">150</span> htable2.put(put);<a name="line.150"></a>
+<span class="sourceLineNo">151</span> }<a name="line.151"></a>
+<span class="sourceLineNo">152</span> Delete delete = new Delete(put.getRow());<a name="line.152"></a>
+<span class="sourceLineNo">153</span> htable2.delete(delete);<a name="line.153"></a>
+<span class="sourceLineNo">154</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.154"></a>
+<span class="sourceLineNo">155</span> }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span> /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span> * Load a row into a table, make sure the data is really the same, delete the row, make sure the<a name="line.158"></a>
+<span class="sourceLineNo">159</span> * delete marker is replicated, run verify replication with and without raw to check the results.<a name="line.159"></a>
+<span class="sourceLineNo">160</span> */<a name="line.160"></a>
+<span class="sourceLineNo">161</span> @Test<a name="line.161"></a>
+<span class="sourceLineNo">162</span> public void testVerifyRepJobWithRawOptions() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span> LOG.info(name.getMethodName());<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span> final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.165"></a>
+<span class="sourceLineNo">166</span> byte[] familyname = Bytes.toBytes("fam_raw");<a name="line.166"></a>
+<span class="sourceLineNo">167</span> byte[] row = Bytes.toBytes("row_raw");<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span> Table lHtable1 = null;<a name="line.169"></a>
+<span class="sourceLineNo">170</span> Table lHtable2 = null;<a name="line.170"></a>
+<span class="sourceLineNo">171</span><a name="line.171"></a>
+<span class="sourceLineNo">172</span> try {<a name="line.172"></a>
+<span class="sourceLineNo">173</span> ColumnFamilyDescriptor fam = ColumnFamilyDescriptorBuilder.newBuilder(familyname)<a name="line.173"></a>
+<span class="sourceLineNo">174</span> .setMaxVersions(100).setScope(HConstants.REPLICATION_SCOPE_GLOBAL).build();<a name="line.174"></a>
+<span class="sourceLineNo">175</span> TableDescriptor table =<a name="line.175"></a>
+<span class="sourceLineNo">176</span> TableDescriptorBuilder.newBuilder(tableName).setColumnFamily(fam).build();<a name="line.176"></a>
+<span class="sourceLineNo">177</span> scopes = new TreeMap<>(Bytes.BYTES_COMPARATOR);<a name="line.177"></a>
+<span class="sourceLineNo">178</span> for (ColumnFamilyDescriptor f : table.getColumnFamilies()) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span> scopes.put(f.getName(), f.getScope());<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> Connection connection1 = ConnectionFactory.createConnection(conf1);<a name="line.182"></a>
+<span class="sourceLineNo">183</span> Connection connection2 = ConnectionFactory.createConnection(conf2);<a name="line.183"></a>
+<span class="sourceLineNo">184</span> try (Admin admin1 = connection1.getAdmin()) {<a name="line.184"></a>
+<span class="sourceLineNo">185</span> admin1.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.185"></a>
+<span class="sourceLineNo">186</span> }<a name="line.186"></a>
+<span class="sourceLineNo">187</span> try (Admin admin2 = connection2.getAdmin()) {<a name="line.187"></a>
+<span class="sourceLineNo">188</span> admin2.createTable(table, HBaseTestingUtility.KEYS_FOR_HBA_CREATE_TABLE);<a name="line.188"></a>
+<span class="sourceLineNo">189</span> }<a name="line.189"></a>
+<span class="sourceLineNo">190</span> utility1.waitUntilAllRegionsAssigned(tableName);<a name="line.190"></a>
+<span class="sourceLineNo">191</span> utility2.waitUntilAllRegionsAssigned(tableName);<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span> lHtable1 = utility1.getConnection().getTable(tableName);<a name="line.193"></a>
+<span class="sourceLineNo">194</span> lHtable2 = utility2.getConnection().getTable(tableName);<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span> Put put = new Put(row);<a name="line.196"></a>
+<span class="sourceLineNo">197</span> put.addColumn(familyname, row, row);<a name="line.197"></a>
+<span class="sourceLineNo">198</span> lHtable1.put(put);<a name="line.198"></a>
+<span class="sourceLineNo">199</span><a name="line.199"></a>
+<span class="sourceLineNo">200</span> Get get = new Get(row);<a name="line.200"></a>
+<span class="sourceLineNo">201</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span> if (i == NB_RETRIES - 1) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span> fail("Waited too much time for put replication");<a name="line.203"></a>
+<span class="sourceLineNo">204</span> }<a name="line.204"></a>
+<span class="sourceLineNo">205</span> Result res = lHtable2.get(get);<a name="line.205"></a>
+<span class="sourceLineNo">206</span> if (res.isEmpty()) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span> LOG.info("Row not available");<a name="line.207"></a>
+<span class="sourceLineNo">208</span> Thread.sleep(SLEEP_TIME);<a name="line.208"></a>
+<span class="sourceLineNo">209</span> } else {<a name="line.209"></a>
+<span class="sourceLineNo">210</span> assertArrayEquals(res.value(), row);<a name="line.210"></a>
+<span class="sourceLineNo">211</span> break;<a name="line.211"></a>
+<span class="sourceLineNo">212</span> }<a name="line.212"></a>
+<span class="sourceLineNo">213</span> }<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span> Delete del = new Delete(row);<a name="line.215"></a>
+<span class="sourceLineNo">216</span> lHtable1.delete(del);<a name="line.216"></a>
+<span class="sourceLineNo">217</span><a name="line.217"></a>
+<span class="sourceLineNo">218</span> get = new Get(row);<a name="line.218"></a>
+<span class="sourceLineNo">219</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.219"></a>
+<span class="sourceLineNo">220</span> if (i == NB_RETRIES - 1) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span> fail("Waited too much time for del replication");<a name="line.221"></a>
+<span class="sourceLineNo">222</span> }<a name="line.222"></a>
+<span class="sourceLineNo">223</span> Result res = lHtable2.get(get);<a name="line.223"></a>
+<span class="sourceLineNo">224</span> if (res.size() >= 1) {<a name="line.224"></a>
+<span class="sourceLineNo">225</span> LOG.info("Row not deleted");<a name="line.225"></a>
+<span class="sourceLineNo">226</span> Thread.sleep(SLEEP_TIME);<a name="line.226"></a>
+<span class="sourceLineNo">227</span> } else {<a name="line.227"></a>
+<span class="sourceLineNo">228</span> break;<a name="line.228"></a>
+<span class="sourceLineNo">229</span> }<a name="line.229"></a>
+<span class="sourceLineNo">230</span> }<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span> // Checking verifyReplication for the default behavior.<a name="line.232"></a>
+<span class="sourceLineNo">233</span> String[] argsWithoutRaw = new String[] { PEER_ID, tableName.getNameAsString() };<a name="line.233"></a>
+<span class="sourceLineNo">234</span> runVerifyReplication(argsWithoutRaw, 0, 0);<a name="line.234"></a>
+<span class="sourceLineNo">235</span><a name="line.235"></a>
+<span class="sourceLineNo">236</span> // Checking verifyReplication with raw<a name="line.236"></a>
+<span class="sourceLineNo">237</span> String[] argsWithRawAsTrue = new String[] { "--raw", PEER_ID, tableName.getNameAsString() };<a name="line.237"></a>
+<span class="sourceLineNo">238</span> runVerifyReplication(argsWithRawAsTrue, 1, 0);<a name="line.238"></a>
+<span class="sourceLineNo">239</span> } finally {<a name="line.239"></a>
+<span class="sourceLineNo">240</span> if (lHtable1 != null) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span> lHtable1.close();<a name="line.241"></a>
+<span class="sourceLineNo">242</span> }<a name="line.242"></a>
+<span class="sourceLineNo">243</span> if (lHtable2 != null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span> lHtable2.close();<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> }<a name="line.247"></a>
+<span class="sourceLineNo">248</span><a name="line.248"></a>
+<span class="sourceLineNo">249</span> // VerifyReplication should honor versions option<a name="line.249"></a>
+<span class="sourceLineNo">250</span> @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span> public void testHBase14905() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span> // normal Batch tests<a name="line.252"></a>
+<span class="sourceLineNo">253</span> byte[] qualifierName = Bytes.toBytes("f1");<a name="line.253"></a>
+<span class="sourceLineNo">254</span> Put put = new Put(Bytes.toBytes("r1"));<a name="line.254"></a>
+<span class="sourceLineNo">255</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1002"));<a name="line.255"></a>
+<span class="sourceLineNo">256</span> htable1.put(put);<a name="line.256"></a>
+<span class="sourceLineNo">257</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1001"));<a name="line.257"></a>
+<span class="sourceLineNo">258</span> htable1.put(put);<a name="line.258"></a>
+<span class="sourceLineNo">259</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1112"));<a name="line.259"></a>
+<span class="sourceLineNo">260</span> htable1.put(put);<a name="line.260"></a>
+<span class="sourceLineNo">261</span><a name="line.261"></a>
+<span class="sourceLineNo">262</span> Scan scan = new Scan();<a name="line.262"></a>
+<span class="sourceLineNo">263</span> scan.readVersions(100);<a name="line.263"></a>
+<span class="sourceLineNo">264</span> ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.264"></a>
+<span class="sourceLineNo">265</span> Result[] res1 = scanner1.next(1);<a name="line.265"></a>
+<span class="sourceLineNo">266</span> scanner1.close();<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span> assertEquals(1, res1.length);<a name="line.268"></a>
+<span class="sourceLineNo">269</span> assertEquals(3, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.269"></a>
<span class="sourceLineNo">270</span><a name="line.270"></a>
-<span class="sourceLineNo">271</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1111"));<a name="line.271"></a>
-<span class="sourceLineNo">272</span> htable2.put(put);<a name="line.272"></a>
-<span class="sourceLineNo">273</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1112"));<a name="line.273"></a>
-<span class="sourceLineNo">274</span> htable2.put(put);<a name="line.274"></a>
-<span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span> scan = new Scan();<a name="line.276"></a>
-<span class="sourceLineNo">277</span> scan.readVersions(100);<a name="line.277"></a>
-<span class="sourceLineNo">278</span> scanner1 = htable2.getScanner(scan);<a name="line.278"></a>
-<span class="sourceLineNo">279</span> res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.279"></a>
-<span class="sourceLineNo">280</span> scanner1.close();<a name="line.280"></a>
-<span class="sourceLineNo">281</span><a name="line.281"></a>
-<span class="sourceLineNo">282</span> assertEquals(1, res1.length);<a name="line.282"></a>
-<span class="sourceLineNo">283</span> assertEquals(5, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span> String[] args = new String[] { "--versions=100", PEER_ID, tableName.getNameAsString() };<a name="line.285"></a>
-<span class="sourceLineNo">286</span> runVerifyReplication(args, 0, 1);<a name="line.286"></a>
-<span class="sourceLineNo">287</span> }<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span> // VerifyReplication should honor versions option<a name="line.289"></a>
-<span class="sourceLineNo">290</span> @Test<a name="line.290"></a>
-<span class="sourceLineNo">291</span> public void testVersionMismatchHBase14905() throws Exception {<a name="line.291"></a>
-<span class="sourceLineNo">292</span> // normal Batch tests<a name="line.292"></a>
-<span class="sourceLineNo">293</span> byte[] qualifierName = Bytes.toBytes("f1");<a name="line.293"></a>
-<span class="sourceLineNo">294</span> Put put = new Put(Bytes.toBytes("r1"));<a name="line.294"></a>
-<span class="sourceLineNo">295</span> long ts = System.currentTimeMillis();<a name="line.295"></a>
-<span class="sourceLineNo">296</span> put.addColumn(famName, qualifierName, ts + 1, Bytes.toBytes("v1"));<a name="line.296"></a>
-<span class="sourceLineNo">297</span> htable1.put(put);<a name="line.297"></a>
-<span class="sourceLineNo">298</span> put.addColumn(famName, qualifierName, ts + 2, Bytes.toBytes("v2"));<a name="line.298"></a>
-<span class="sourceLineNo">299</span> htable1.put(put);<a name="line.299"></a>
-<span class="sourceLineNo">300</span> put.addColumn(famName, qualifierName, ts + 3, Bytes.toBytes("v3"));<a name="line.300"></a>
-<span class="sourceLineNo">301</span> htable1.put(put);<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span> Scan scan = new Scan();<a name="line.303"></a>
-<span class="sourceLineNo">304</span> scan.readVersions(100);<a name="line.304"></a>
-<span class="sourceLineNo">305</span> ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.305"></a>
-<span class="sourceLineNo">306</span> Result[] res1 = scanner1.next(1);<a name="line.306"></a>
-<span class="sourceLineNo">307</span> scanner1.close();<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span> assertEquals(1, res1.length);<a name="line.309"></a>
-<span class="sourceLineNo">310</span> assertEquals(3, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.310"></a>
+<span class="sourceLineNo">271</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.271"></a>
+<span class="sourceLineNo">272</span> scan = new Scan();<a name="line.272"></a>
+<span class="sourceLineNo">273</span> scan.readVersions(100);<a name="line.273"></a>
+<span class="sourceLineNo">274</span> scanner1 = htable2.getScanner(scan);<a name="line.274"></a>
+<span class="sourceLineNo">275</span> res1 = scanner1.next(1);<a name="line.275"></a>
+<span class="sourceLineNo">276</span> scanner1.close();<a name="line.276"></a>
+<span class="sourceLineNo">277</span> if (res1.length != 1) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span> LOG.info("Only got " + res1.length + " rows");<a name="line.278"></a>
+<span class="sourceLineNo">279</span> Thread.sleep(SLEEP_TIME);<a name="line.279"></a>
+<span class="sourceLineNo">280</span> } else {<a name="line.280"></a>
+<span class="sourceLineNo">281</span> int cellNumber = res1[0].getColumnCells(famName, Bytes.toBytes("f1")).size();<a name="line.281"></a>
+<span class="sourceLineNo">282</span> if (cellNumber != 3) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span> LOG.info("Only got " + cellNumber + " cells");<a name="line.283"></a>
+<span class="sourceLineNo">284</span> Thread.sleep(SLEEP_TIME);<a name="line.284"></a>
+<span class="sourceLineNo">285</span> } else {<a name="line.285"></a>
+<span class="sourceLineNo">286</span> break;<a name="line.286"></a>
+<span class="sourceLineNo">287</span> }<a name="line.287"></a>
+<span class="sourceLineNo">288</span> }<a name="line.288"></a>
+<span class="sourceLineNo">289</span> if (i == NB_RETRIES - 1) {<a name="line.289"></a>
+<span class="sourceLineNo">290</span> fail("Waited too much time for normal batch replication");<a name="line.290"></a>
+<span class="sourceLineNo">291</span> }<a name="line.291"></a>
+<span class="sourceLineNo">292</span> }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1111"));<a name="line.294"></a>
+<span class="sourceLineNo">295</span> htable2.put(put);<a name="line.295"></a>
+<span class="sourceLineNo">296</span> put.addColumn(famName, qualifierName, Bytes.toBytes("v1112"));<a name="line.296"></a>
+<span class="sourceLineNo">297</span> htable2.put(put);<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span> scan = new Scan();<a name="line.299"></a>
+<span class="sourceLineNo">300</span> scan.readVersions(100);<a name="line.300"></a>
+<span class="sourceLineNo">301</span> scanner1 = htable2.getScanner(scan);<a name="line.301"></a>
+<span class="sourceLineNo">302</span> res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.302"></a>
+<span class="sourceLineNo">303</span> scanner1.close();<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span> assertEquals(1, res1.length);<a name="line.305"></a>
+<span class="sourceLineNo">306</span> assertEquals(5, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span> String[] args = new String[] { "--versions=100", PEER_ID, tableName.getNameAsString() };<a name="line.308"></a>
+<span class="sourceLineNo">309</span> runVerifyReplication(args, 0, 1);<a name="line.309"></a>
+<span class="sourceLineNo">310</span> }<a name="line.310"></a>
<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span> scan = new Scan();<a name="line.313"></a>
-<span class="sourceLineNo">314</span> scan.readVersions(100);<a name="line.314"></a>
-<span class="sourceLineNo">315</span> scanner1 = htable2.getScanner(scan);<a name="line.315"></a>
-<span class="sourceLineNo">316</span> res1 = scanner1.next(1);<a name="line.316"></a>
-<span class="sourceLineNo">317</span> scanner1.close();<a name="line.317"></a>
-<span class="sourceLineNo">318</span> if (res1.length != 1) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span> LOG.info("Only got " + res1.length + " rows");<a name="line.319"></a>
-<span class="sourceLineNo">320</span> Thread.sleep(SLEEP_TIME);<a name="line.320"></a>
-<span class="sourceLineNo">321</span> } else {<a name="line.321"></a>
-<span class="sourceLineNo">322</span> int cellNumber = res1[0].getColumnCells(famName, Bytes.toBytes("f1")).size();<a name="line.322"></a>
-<span class="sourceLineNo">323</span> if (cellNumber != 3) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span> LOG.info("Only got " + cellNumber + " cells");<a name="line.324"></a>
-<span class="sourceLineNo">325</span> Thread.sleep(SLEEP_TIME);<a name="line.325"></a>
-<span class="sourceLineNo">326</span> } else {<a name="line.326"></a>
-<span class="sourceLineNo">327</span> break;<a name="line.327"></a>
-<span class="sourceLineNo">328</span> }<a name="line.328"></a>
-<span class="sourceLineNo">329</span> }<a name="line.329"></a>
-<span class="sourceLineNo">330</span> if (i == NB_RETRIES - 1) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span> fail("Waited too much time for normal batch replication");<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">312</span> // VerifyReplication should honor versions option<a name="line.312"></a>
+<span class="sourceLineNo">313</span> @Test<a name="line.313"></a>
+<span class="sourceLineNo">314</span> public void testVersionMismatchHBase14905() throws Exception {<a name="line.314"></a>
+<span class="sourceLineNo">315</span> // normal Batch tests<a name="line.315"></a>
+<span class="sourceLineNo">316</span> byte[] qualifierName = Bytes.toBytes("f1");<a name="line.316"></a>
+<span class="sourceLineNo">317</span> Put put = new Put(Bytes.toBytes("r1"));<a name="line.317"></a>
+<span class="sourceLineNo">318</span> long ts = System.currentTimeMillis();<a name="line.318"></a>
+<span class="sourceLineNo">319</span> put.addColumn(famName, qualifierName, ts + 1, Bytes.toBytes("v1"));<a name="line.319"></a>
+<span class="sourceLineNo">320</span> htable1.put(put);<a name="line.320"></a>
+<span class="sourceLineNo">321</span> put.addColumn(famName, qualifierName, ts + 2, Bytes.toBytes("v2"));<a name="line.321"></a>
+<span class="sourceLineNo">322</span> htable1.put(put);<a name="line.322"></a>
+<span class="sourceLineNo">323</span> put.addColumn(famName, qualifierName, ts + 3, Bytes.toBytes("v3"));<a name="line.323"></a>
+<span class="sourceLineNo">324</span> htable1.put(put);<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span> Scan scan = new Scan();<a name="line.326"></a>
+<span class="sourceLineNo">327</span> scan.readVersions(100);<a name="line.327"></a>
+<span class="sourceLineNo">328</span> ResultScanner scanner1 = htable1.getScanner(scan);<a name="line.328"></a>
+<span class="sourceLineNo">329</span> Result[] res1 = scanner1.next(1);<a name="line.329"></a>
+<span class="sourceLineNo">330</span> scanner1.close();<a name="line.330"></a>
+<span class="sourceLineNo">331</span><a name="line.331"></a>
+<span class="sourceLineNo">332</span> assertEquals(1, res1.length);<a name="line.332"></a>
+<span class="sourceLineNo">333</span> assertEquals(3, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.333"></a>
<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span> try {<a name="line.335"></a>
-<span class="sourceLineNo">336</span> // Disabling replication and modifying the particular version of the cell to validate the<a name="line.336"></a>
-<span class="sourceLineNo">337</span> // feature.<a name="line.337"></a>
-<span class="sourceLineNo">338</span> hbaseAdmin.disableReplicationPeer(PEER_ID);<a name="line.338"></a>
-<span class="sourceLineNo">339</span> Put put2 = new Put(Bytes.toBytes("r1"));<a name="line.339"></a>
-<span class="sourceLineNo">340</span> put2.addColumn(famName, qualifierName, ts + 2, Bytes.toBytes("v99"));<a name="line.340"></a>
-<span class="sourceLineNo">341</span> htable2.put(put2);<a name="line.341"></a>
-<span class="sourceLineNo">342</span><a name="line.342"></a>
-<span class="sourceLineNo">343</span> scan = new Scan();<a name="line.343"></a>
-<span class="sourceLineNo">344</span> scan.readVersions(100);<a name="line.344"></a>
-<span class="sourceLineNo">345</span> scanner1 = htable2.getScanner(scan);<a name="line.345"></a>
-<span class="sourceLineNo">346</span> res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.346"></a>
-<span class="sourceLineNo">347</span> scanner1.close();<a name="line.347"></a>
-<span class="sourceLineNo">348</span> assertEquals(1, res1.length);<a name="line.348"></a>
-<span class="sourceLineNo">349</span> assertEquals(3, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.349"></a>
-<span class="sourceLineNo">350</span><a name="line.350"></a>
-<span class="sourceLineNo">351</span> String[] args = new String[] { "--versions=100", PEER_ID, tableName.getNameAsString() };<a name="line.351"></a>
-<span class="sourceLineNo">352</span> runVerifyReplication(args, 0, 1);<a name="line.352"></a>
-<span class="sourceLineNo">353</span> } finally {<a name="line.353"></a>
-<span class="sourceLineNo">354</span> hbaseAdmin.enableReplicationPeer(PEER_ID);<a name="line.354"></a>
-<span class="sourceLineNo">355</span> }<a name="line.355"></a>
-<span class="sourceLineNo">356</span> }<a name="line.356"></a>
+<span class="sourceLineNo">335</span> for (int i = 0; i < NB_RETRIES; i++) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span> scan = new Scan();<a name="line.336"></a>
+<span class="sourceLineNo">337</span> scan.readVersions(100);<a name="line.337"></a>
+<span class="sourceLineNo">338</span> scanner1 = htable2.getScanner(scan);<a name="line.338"></a>
+<span class="sourceLineNo">339</span> res1 = scanner1.next(1);<a name="line.339"></a>
+<span class="sourceLineNo">340</span> scanner1.close();<a name="line.340"></a>
+<span class="sourceLineNo">341</span> if (res1.length != 1) {<a name="line.341"></a>
+<span class="sourceLineNo">342</span> LOG.info("Only got " + res1.length + " rows");<a name="line.342"></a>
+<span class="sourceLineNo">343</span> Thread.sleep(SLEEP_TIME);<a name="line.343"></a>
+<span class="sourceLineNo">344</span> } else {<a name="line.344"></a>
+<span class="sourceLineNo">345</span> int cellNumber = res1[0].getColumnCells(famName, Bytes.toBytes("f1")).size();<a name="line.345"></a>
+<span class="sourceLineNo">346</span> if (cellNumber != 3) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span> LOG.info("Only got " + cellNumber + " cells");<a name="line.347"></a>
+<span class="sourceLineNo">348</span> Thread.sleep(SLEEP_TIME);<a name="line.348"></a>
+<span class="sourceLineNo">349</span> } else {<a name="line.349"></a>
+<span class="sourceLineNo">350</span> break;<a name="line.350"></a>
+<span class="sourceLineNo">351</span> }<a name="line.351"></a>
+<span class="sourceLineNo">352</span> }<a name="line.352"></a>
+<span class="sourceLineNo">353</span> if (i == NB_RETRIES - 1) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span> fail("Waited too much time for normal batch replication");<a name="line.354"></a>
+<span class="sourceLineNo">355</span> }<a name="line.355"></a>
+<span class="sourceLineNo">356</span> }<a name="line.356"></a>
<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span> @Test<a name="line.358"></a>
-<span class="sourceLineNo">359</span> public void testVerifyReplicationPrefixFiltering() throws Exception {<a name="line.359"></a>
-<span class="sourceLineNo">360</span> final byte[] prefixRow = Bytes.toBytes("prefixrow");<a name="line.360"></a>
-<span class="sourceLineNo">361</span> final byte[] prefixRow2 = Bytes.toBytes("secondrow");<a name="line.361"></a>
-<span class="sourceLineNo">362</span> loadData("prefixrow", prefixRow);<a name="line.362"></a>
-<span class="sourceLineNo">363</span> loadData("secondrow", prefixRow2);<a name="line.363"></a>
-<span class="sourceLineNo">364</span> loadData("aaa", row);<a name="line.364"></a>
-<span class="sourceLineNo">365</span> loadData("zzz", row);<a name="line.365"></a>
-<span class="sourceLineNo">366</span> waitForReplication(NB_ROWS_IN_BATCH * 4, NB_RETRIES * 4);<a name="line.366"></a>
-<span class="sourceLineNo">367</span> String[] args =<a name="line.367"></a>
-<span class="sourceLineNo">368</span> new String[] { "--row-prefixes=prefixrow,secondrow", PEER_ID, tableName.getNameAsString() };<a name="line.368"></a>
-<span class="sourceLineNo">369</span> runVerifyReplication(args, NB_ROWS_IN_BATCH * 2, 0);<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> @Test<a name="line.372"></a>
-<span class="sourceLineNo">373</span> public void testVerifyReplicationSnapshotArguments() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span> String[] args =<a name="line.374"></a>
-<span class="sourceLineNo">375</span> new String[] { "--sourceSnapshotName=snapshot1", "2", tableName.getNameAsString() };<a name="line.375"></a>
-<span class="sourceLineNo">376</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span> args = new String[] { "--sourceSnapshotTmpDir=tmp", "2", tableName.getNameAsString() };<a name="line.378"></a>
-<span class="sourceLineNo">379</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.379"></a>
+<span class="sourceLineNo">358</span> try {<a name="line.358"></a>
+<span class="sourceLineNo">359</span> // Disabling replication and modifying the particular version of the cell to validate the<a name="line.359"></a>
+<span class="sourceLineNo">360</span> // feature.<a name="line.360"></a>
+<span class="sourceLineNo">361</span> hbaseAdmin.disableReplicationPeer(PEER_ID);<a name="line.361"></a>
+<span class="sourceLineNo">362</span> Put put2 = new Put(Bytes.toBytes("r1"));<a name="line.362"></a>
+<span class="sourceLineNo">363</span> put2.addColumn(famName, qualifierName, ts + 2, Bytes.toBytes("v99"));<a name="line.363"></a>
+<span class="sourceLineNo">364</span> htable2.put(put2);<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span> scan = new Scan();<a name="line.366"></a>
+<span class="sourceLineNo">367</span> scan.readVersions(100);<a name="line.367"></a>
+<span class="sourceLineNo">368</span> scanner1 = htable2.getScanner(scan);<a name="line.368"></a>
+<span class="sourceLineNo">369</span> res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.369"></a>
+<span class="sourceLineNo">370</span> scanner1.close();<a name="line.370"></a>
+<span class="sourceLineNo">371</span> assertEquals(1, res1.length);<a name="line.371"></a>
+<span class="sourceLineNo">372</span> assertEquals(3, res1[0].getColumnCells(famName, qualifierName).size());<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span> String[] args = new String[] { "--versions=100", PEER_ID, tableName.getNameAsString() };<a name="line.374"></a>
+<span class="sourceLineNo">375</span> runVerifyReplication(args, 0, 1);<a name="line.375"></a>
+<span class="sourceLineNo">376</span> } finally {<a name="line.376"></a>
+<span class="sourceLineNo">377</span> hbaseAdmin.enableReplicationPeer(PEER_ID);<a name="line.377"></a>
+<span class="sourceLineNo">378</span> }<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> args = new String[] { "--sourceSnapshotName=snapshot1", "--sourceSnapshotTmpDir=tmp", "2",<a name="line.381"></a>
-<span class="sourceLineNo">382</span> tableName.getNameAsString() };<a name="line.382"></a>
-<span class="sourceLineNo">383</span> assertTrue(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.383"></a>
-<span class="sourceLineNo">384</span><a name="line.384"></a>
-<span class="sourceLineNo">385</span> args = new String[] { "--peerSnapshotName=snapshot1", "2", tableName.getNameAsString() };<a name="line.385"></a>
-<span class="sourceLineNo">386</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span> args = new String[] { "--peerSnapshotTmpDir=/tmp/", "2", tableName.getNameAsString() };<a name="line.388"></a>
-<span class="sourceLineNo">389</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span> args = new String[] { "--peerSnapshotName=snapshot1", "--peerSnapshotTmpDir=/tmp/",<a name="line.391"></a>
-<span class="sourceLineNo">392</span> "--peerFSAddress=tempfs", "--peerHBaseRootAddress=hdfs://tempfs:50070/hbase/", "2",<a name="line.392"></a>
-<span class="sourceLineNo">393</span> tableName.getNameAsString() };<a name="line.393"></a>
-<span class="sourceLineNo">394</span> assertTrue(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.394"></a>
-<span class="sourceLineNo">395</span><a name="line.395"></a>
-<span class="sourceLineNo">396</span> args = new String[] { "--sourceSnapshotName=snapshot1", "--sourceSnapshotTmpDir=/tmp/",<a name="line.396"></a>
-<span class="sourceLineNo">397</span> "--peerSnapshotName=snapshot2", "--peerSnapshotTmpDir=/tmp/", "--peerFSAddress=tempfs",<a name="line.397"></a>
-<span class="sourceLineNo">398</span> "--peerHBaseRootAddress=hdfs://tempfs:50070/hbase/", "2", tableName.getNameAsString() };<a name="line.398"></a>
-<span class="sourceLineNo">399</span><a name="line.399"></a>
-<span class="sourceLineNo">400</span> assertTrue(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.400"></a>
-<span class="sourceLineNo">401</span> }<a name="line.401"></a>
-<span class="sourceLineNo">402</span><a name="line.402"></a>
-<span class="sourceLineNo">403</span> private void checkRestoreTmpDir(Configuration conf, String restoreTmpDir, int expectedCount)<a name="line.403"></a>
-<span class="sourceLineNo">404</span> throws IOException {<a name="line.404"></a>
-<span class="sourceLineNo">405</span> FileSystem fs = FileSystem.get(conf);<a name="line.405"></a>
-<span class="sourceLineNo">406</span> FileStatus[] subDirectories = fs.listStatus(new Path(restoreTmpDir));<a name="line.406"></a>
-<span class="sourceLineNo">407</span> assertNotNull(subDirectories);<a name="line.407"></a>
-<span class="sourceLineNo">408</span> assertEquals(subDirectories.length, expectedCount);<a name="line.408"></a>
-<span class="sourceLineNo">409</span> for (int i = 0; i < expectedCount; i++) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span> assertTrue(subDirectories[i].isDirectory());<a name="line.410"></a>
-<span class="sourceLineNo">411</span> }<a name="line.411"></a>
-<span class="sourceLineNo">412</span> }<a name="line.412"></a>
+<span class="sourceLineNo">381</span> @Test<a name="line.381"></a>
+<span class="sourceLineNo">382</span> public void testVerifyReplicationPrefixFiltering() throws Exception {<a name="line.382"></a>
+<span class="sourceLineNo">383</span> final byte[] prefixRow = Bytes.toBytes("prefixrow");<a name="line.383"></a>
+<span class="sourceLineNo">384</span> final byte[] prefixRow2 = Bytes.toBytes("secondrow");<a name="line.384"></a>
+<span class="sourceLineNo">385</span> loadData("prefixrow", prefixRow);<a name="line.385"></a>
+<span class="sourceLineNo">386</span> loadData("secondrow", prefixRow2);<a name="line.386"></a>
+<span class="sourceLineNo">387</span> loadData("aaa", row);<a name="line.387"></a>
+<span class="sourceLineNo">388</span> loadData("zzz", row);<a name="line.388"></a>
+<span class="sourceLineNo">389</span> waitForReplication(NB_ROWS_IN_BATCH * 4, NB_RETRIES * 4);<a name="line.389"></a>
+<span class="sourceLineNo">390</span> String[] args =<a name="line.390"></a>
+<span class="sourceLineNo">391</span> new String[] { "--row-prefixes=prefixrow,secondrow", PEER_ID, tableName.getNameAsString() };<a name="line.391"></a>
+<span class="sourceLineNo">392</span> runVerifyReplication(args, NB_ROWS_IN_BATCH * 2, 0);<a name="line.392"></a>
+<span class="sourceLineNo">393</span> }<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span> @Test<a name="line.395"></a>
+<span class="sourceLineNo">396</span> public void testVerifyReplicationSnapshotArguments() {<a name="line.396"></a>
+<span class="sourceLineNo">397</span> String[] args =<a name="line.397"></a>
+<span class="sourceLineNo">398</span> new String[] { "--sourceSnapshotName=snapshot1", "2", tableName.getNameAsString() };<a name="line.398"></a>
+<span class="sourceLineNo">399</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span> args = new String[] { "--sourceSnapshotTmpDir=tmp", "2", tableName.getNameAsString() };<a name="line.401"></a>
+<span class="sourceLineNo">402</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.402"></a>
+<span class="sourceLineNo">403</span><a name="line.403"></a>
+<span class="sourceLineNo">404</span> args = new String[] { "--sourceSnapshotName=snapshot1", "--sourceSnapshotTmpDir=tmp", "2",<a name="line.404"></a>
+<span class="sourceLineNo">405</span> tableName.getNameAsString() };<a name="line.405"></a>
+<span class="sourceLineNo">406</span> assertTrue(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.406"></a>
+<span class="sourceLineNo">407</span><a name="line.407"></a>
+<span class="sourceLineNo">408</span> args = new String[] { "--peerSnapshotName=snapshot1", "2", tableName.getNameAsString() };<a name="line.408"></a>
+<span class="sourceLineNo">409</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span> args = new String[] { "--peerSnapshotTmpDir=/tmp/", "2", tableName.getNameAsString() };<a name="line.411"></a>
+<span class="sourceLineNo">412</span> assertFalse(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.412"></a>
<span class="sourceLineNo">413</span><a name="line.413"></a>
-<span class="sourceLineNo">414</span> @Test<a name="line.414"></a>
-<span class="sourceLineNo">415</span> public void testVerifyReplicationWithSnapshotSupport() throws Exception {<a name="line.415"></a>
-<span class="sourceLineNo">416</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.416"></a>
-<span class="sourceLineNo">417</span> // identical since it does the check<a name="line.417"></a>
-<span class="sourceLineNo">418</span> runSmallBatchTest();<a name="line.418"></a>
-<span class="sourceLineNo">419</span><a name="line.419"></a>
-<span class="sourceLineNo">420</span> // Take source and target tables snapshot<a name="line.420"></a>
-<span class="sourceLineNo">421</span> Path rootDir = FSUtils.getRootDir(conf1);<a name="line.421"></a>
-<span class="sourceLineNo">422</span> FileSystem fs = rootDir.getFileSystem(conf1);<a name="line.422"></a>
-<span class="sourceLineNo">423</span> String sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.423"></a>
-<span class="sourceLineNo">424</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.424"></a>
-<span class="sourceLineNo">425</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.425"></a>
-<span class="sourceLineNo">426</span><a name="line.426"></a>
-<span class="sourceLineNo">427</span> // Take target snapshot<a name="line.427"></a>
-<span class="sourceLineNo">428</span> Path peerRootDir = FSUtils.getRootDir(conf2);<a name="line.428"></a>
-<span class="sourceLineNo">429</span> FileSystem peerFs = peerRootDir.getFileSystem(conf2);<a name="line.429"></a>
-<span class="sourceLineNo">430</span> String peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.430"></a>
-<span class="sourceLineNo">431</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.431"></a>
-<span class="sourceLineNo">432</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span> String peerFSAddress = peerFs.getUri().toString();<a name="line.434"></a>
-<span class="sourceLineNo">435</span> String temPath1 = utility1.getRandomDir().toString();<a name="line.435"></a>
-<span class="sourceLineNo">436</span> String temPath2 = "/tmp" + System.currentTimeMillis();<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span> String[] args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.438"></a>
-<span class="sourceLineNo">439</span> "--sourceSnapshotTmpDir=" + temPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.439"></a>
-<span class="sourceLineNo">440</span> "--peerSnapshotTmpDir=" + temPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.440"></a>
-<span class="sourceLineNo">441</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), "2", tableName.getNameAsString() };<a name="line.441"></a>
-<span class="sourceLineNo">442</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.442"></a>
-<span class="sourceLineNo">443</span> checkRestoreTmpDir(conf1, temPath1, 1);<a name="line.443"></a>
-<span class="sourceLineNo">444</span> checkRestoreTmpDir(conf2, temPath2, 1);<a name="line.444"></a>
-<span class="sourceLineNo">445</span><a name="line.445"></a>
-<span class="sourceLineNo">446</span> Scan scan = new Scan();<a name="line.446"></a>
-<span class="sourceLineNo">447</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.447"></a>
-<span class="sourceLineNo">448</span> Put put = null;<a name="line.448"></a>
-<span class="sourceLineNo">449</span> for (Result result : rs) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span> put = new Put(result.getRow());<a name="line.450"></a>
-<span class="sourceLineNo">451</span> Cell firstVal = result.rawCells()[0];<a name="line.451"></a>
-<span class="sourceLineNo">452</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.452"></a>
-<span class="sourceLineNo">453</span> Bytes.toBytes("diff data"));<a name="line.453"></a>
-<span class="sourceLineNo">454</span> htable2.put(put);<a name="line.454"></a>
-<span class="sourceLineNo">455</span> }<a name="line.455"></a>
-<span class="sourceLineNo">456</span> Delete delete = new Delete(put.getRow());<a name="line.456"></a>
-<span class="sourceLineNo">457</span> htable2.delete(delete);<a name="line.457"></a>
-<span class="sourceLineNo">458</span><a name="line.458"></a>
-<span class="sourceLineNo">459</span> sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.459"></a>
-<span class="sourceLineNo">460</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.460"></a>
-<span class="sourceLineNo">461</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span> peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.463"></a>
-<span class="sourceLineNo">464</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.464"></a>
-<span class="sourceLineNo">465</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span> args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.467"></a>
-<span class="sourceLineNo">468</span> "--sourceSnapshotTmpDir=" + temPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.468"></a>
-<span class="sourceLineNo">469</span> "--peerSnapshotTmpDir=" + temPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.469"></a>
-<span class="sourceLineNo">470</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), "2", tableName.getNameAsString() };<a name="line.470"></a>
-<span class="sourceLineNo">471</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.471"></a>
-<span class="sourceLineNo">472</span> checkRestoreTmpDir(conf1, temPath1, 2);<a name="line.472"></a>
-<span class="sourceLineNo">473</span> checkRestoreTmpDir(conf2, temPath2, 2);<a name="line.473"></a>
-<span class="sourceLineNo">474</span> }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span> @Test<a name="line.476"></a>
-<span class="sourceLineNo">477</span> public void testVerifyRepJobWithQuorumAddress() throws Exception {<a name="line.477"></a>
-<span class="sourceLineNo">478</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.478"></a>
-<span class="sourceLineNo">479</span> // identical since it does the check<a name="line.479"></a>
-<span class="sourceLineNo">480</span> runSmallBatchTest();<a name="line.480"></a>
+<span class="sourceLineNo">414</span> args = new String[] { "--peerSnapshotName=snapshot1", "--peerSnapshotTmpDir=/tmp/",<a name="line.414"></a>
+<span class="sourceLineNo">415</span> "--peerFSAddress=tempfs", "--peerHBaseRootAddress=hdfs://tempfs:50070/hbase/", "2",<a name="line.415"></a>
+<span class="sourceLineNo">416</span> tableName.getNameAsString() };<a name="line.416"></a>
+<span class="sourceLineNo">417</span> assertTrue(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.417"></a>
+<span class="sourceLineNo">418</span><a name="line.418"></a>
+<span class="sourceLineNo">419</span> args = new String[] { "--sourceSnapshotName=snapshot1", "--sourceSnapshotTmpDir=/tmp/",<a name="line.419"></a>
+<span class="sourceLineNo">420</span> "--peerSnapshotName=snapshot2", "--peerSnapshotTmpDir=/tmp/", "--peerFSAddress=tempfs",<a name="line.420"></a>
+<span class="sourceLineNo">421</span> "--peerHBaseRootAddress=hdfs://tempfs:50070/hbase/", "2", tableName.getNameAsString() };<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span> assertTrue(Lists.newArrayList(args).toString(), new VerifyReplication().doCommandLine(args));<a name="line.423"></a>
+<span class="sourceLineNo">424</span> }<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span> private void checkRestoreTmpDir(Configuration conf, String restoreTmpDir, int expectedCount)<a name="line.426"></a>
+<span class="sourceLineNo">427</span> throws IOException {<a name="line.427"></a>
+<span class="sourceLineNo">428</span> FileSystem fs = FileSystem.get(conf);<a name="line.428"></a>
+<span class="sourceLineNo">429</span> FileStatus[] subDirectories = fs.listStatus(new Path(restoreTmpDir));<a name="line.429"></a>
+<span class="sourceLineNo">430</span> assertNotNull(subDirectories);<a name="line.430"></a>
+<span class="sourceLineNo">431</span> assertEquals(subDirectories.length, expectedCount);<a name="line.431"></a>
+<span class="sourceLineNo">432</span> for (int i = 0; i < expectedCount; i++) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span> assertTrue(subDirectories[i].isDirectory());<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><a name="line.436"></a>
+<span class="sourceLineNo">437</span> @Test<a name="line.437"></a>
+<span class="sourceLineNo">438</span> public void testVerifyReplicationWithSnapshotSupport() throws Exception {<a name="line.438"></a>
+<span class="sourceLineNo">439</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.439"></a>
+<span class="sourceLineNo">440</span> // identical since it does the check<a name="line.440"></a>
+<span class="sourceLineNo">441</span> runSmallBatchTest();<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span> // Take source and target tables snapshot<a name="line.443"></a>
+<span class="sourceLineNo">444</span> Path rootDir = FSUtils.getRootDir(conf1);<a name="line.444"></a>
+<span class="sourceLineNo">445</span> FileSystem fs = rootDir.getFileSystem(conf1);<a name="line.445"></a>
+<span class="sourceLineNo">446</span> String sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.446"></a>
+<span class="sourceLineNo">447</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.447"></a>
+<span class="sourceLineNo">448</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span> // Take target snapshot<a name="line.450"></a>
+<span class="sourceLineNo">451</span> Path peerRootDir = FSUtils.getRootDir(conf2);<a name="line.451"></a>
+<span class="sourceLineNo">452</span> FileSystem peerFs = peerRootDir.getFileSystem(conf2);<a name="line.452"></a>
+<span class="sourceLineNo">453</span> String peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.453"></a>
+<span class="sourceLineNo">454</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.454"></a>
+<span class="sourceLineNo">455</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span> String peerFSAddress = peerFs.getUri().toString();<a name="line.457"></a>
+<span class="sourceLineNo">458</span> String temPath1 = utility1.getRandomDir().toString();<a name="line.458"></a>
+<span class="sourceLineNo">459</span> String temPath2 = "/tmp" + System.currentTimeMillis();<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span> String[] args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.461"></a>
+<span class="sourceLineNo">462</span> "--sourceSnapshotTmpDir=" + temPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.462"></a>
+<span class="sourceLineNo">463</span> "--peerSnapshotTmpDir=" + temPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.463"></a>
+<span class="sourceLineNo">464</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), "2", tableName.getNameAsString() };<a name="line.464"></a>
+<span class="sourceLineNo">465</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.465"></a>
+<span class="sourceLineNo">466</span> checkRestoreTmpDir(conf1, temPath1, 1);<a name="line.466"></a>
+<span class="sourceLineNo">467</span> checkRestoreTmpDir(conf2, temPath2, 1);<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span> Scan scan = new Scan();<a name="line.469"></a>
+<span class="sourceLineNo">470</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.470"></a>
+<span class="sourceLineNo">471</span> Put put = null;<a name="line.471"></a>
+<span class="sourceLineNo">472</span> for (Result result : rs) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span> put = new Put(result.getRow());<a name="line.473"></a>
+<span class="sourceLineNo">474</span> Cell firstVal = result.rawCells()[0];<a name="line.474"></a>
+<span class="sourceLineNo">475</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.475"></a>
+<span class="sourceLineNo">476</span> Bytes.toBytes("diff data"));<a name="line.476"></a>
+<span class="sourceLineNo">477</span> htable2.put(put);<a name="line.477"></a>
+<span class="sourceLineNo">478</span> }<a name="line.478"></a>
+<span class="sourceLineNo">479</span> Delete delete = new Delete(put.getRow());<a name="line.479"></a>
+<span class="sourceLineNo">480</span> htable2.delete(delete);<a name="line.480"></a>
<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span> // with a quorum address (a cluster key)<a name="line.482"></a>
-<span class="sourceLineNo">483</span> String[] args = new String[] { utility2.getClusterKey(), tableName.getNameAsString() };<a name="line.483"></a>
-<span class="sourceLineNo">484</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.484"></a>
+<span class="sourceLineNo">482</span> sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.482"></a>
+<span class="sourceLineNo">483</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.483"></a>
+<span class="sourceLineNo">484</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.484"></a>
<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span> Scan scan = new Scan();<a name="line.486"></a>
-<span class="sourceLineNo">487</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.487"></a>
-<span class="sourceLineNo">488</span> Put put = null;<a name="line.488"></a>
-<span class="sourceLineNo">489</span> for (Result result : rs) {<a name="line.489"></a>
-<span class="sourceLineNo">490</span> put = new Put(result.getRow());<a name="line.490"></a>
-<span class="sourceLineNo">491</span> Cell firstVal = result.rawCells()[0];<a name="line.491"></a>
-<span class="sourceLineNo">492</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.492"></a>
-<span class="sourceLineNo">493</span> Bytes.toBytes("diff data"));<a name="line.493"></a>
-<span class="sourceLineNo">494</span> htable2.put(put);<a name="line.494"></a>
-<span class="sourceLineNo">495</span> }<a name="line.495"></a>
-<span class="sourceLineNo">496</span> Delete delete = new Delete(put.getRow());<a name="line.496"></a>
-<span class="sourceLineNo">497</span> htable2.delete(delete);<a name="line.497"></a>
-<span class="sourceLineNo">498</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<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> @Test<a name="line.501"></a>
-<span class="sourceLineNo">502</span> public void testVerifyRepJobWithQuorumAddressAndSnapshotSupport() throws Exception {<a name="line.502"></a>
-<span class="sourceLineNo">503</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.503"></a>
-<span class="sourceLineNo">504</span> // identical since it does the check<a name="line.504"></a>
-<span class="sourceLineNo">505</span> runSmallBatchTest();<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span> // Take source and target tables snapshot<a name="line.507"></a>
-<span class="sourceLineNo">508</span> Path rootDir = FSUtils.getRootDir(conf1);<a name="line.508"></a>
-<span class="sourceLineNo">509</span> FileSystem fs = rootDir.getFileSystem(conf1);<a name="line.509"></a>
-<span class="sourceLineNo">510</span> String sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.510"></a>
-<span class="sourceLineNo">511</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.511"></a>
-<span class="sourceLineNo">512</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span> // Take target snapshot<a name="line.514"></a>
-<span class="sourceLineNo">515</span> Path peerRootDir = FSUtils.getRootDir(conf2);<a name="line.515"></a>
-<span class="sourceLineNo">516</span> FileSystem peerFs = peerRootDir.getFileSystem(conf2);<a name="line.516"></a>
-<span class="sourceLineNo">517</span> String peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.517"></a>
-<span class="sourceLineNo">518</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.518"></a>
-<span class="sourceLineNo">519</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.519"></a>
-<span class="sourceLineNo">520</span><a name="line.520"></a>
-<span class="sourceLineNo">521</span> String peerFSAddress = peerFs.getUri().toString();<a name="line.521"></a>
-<span class="sourceLineNo">522</span> String tmpPath1 = utility1.getRandomDir().toString();<a name="line.522"></a>
-<span class="sourceLineNo">523</span> String tmpPath2 = "/tmp" + System.currentTimeMillis();<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span> String[] args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.525"></a>
-<span class="sourceLineNo">526</span> "--sourceSnapshotTmpDir=" + tmpPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.526"></a>
-<span class="sourceLineNo">527</span> "--peerSnapshotTmpDir=" + tmpPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.527"></a>
-<span class="sourceLineNo">528</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), utility2.getClusterKey(),<a name="line.528"></a>
-<span class="sourceLineNo">529</span> tableName.getNameAsString() };<a name="line.529"></a>
-<span class="sourceLineNo">530</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.530"></a>
-<span class="sourceLineNo">531</span> checkRestoreTmpDir(conf1, tmpPath1, 1);<a name="line.531"></a>
-<span class="sourceLineNo">532</span> checkRestoreTmpDir(conf2, tmpPath2, 1);<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span> Scan scan = new Scan();<a name="line.534"></a>
-<span class="sourceLineNo">535</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.535"></a>
-<span class="sourceLineNo">536</span> Put put = null;<a name="line.536"></a>
-<span class="sourceLineNo">537</span> for (Result result : rs) {<a name="line.537"></a>
-<span class="sourceLineNo">538</span> put = new Put(result.getRow());<a name="line.538"></a>
-<span class="sourceLineNo">539</span> Cell firstVal = result.rawCells()[0];<a name="line.539"></a>
-<span class="sourceLineNo">540</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.540"></a>
-<span class="sourceLineNo">541</span> Bytes.toBytes("diff data"));<a name="line.541"></a>
-<span class="sourceLineNo">542</span> htable2.put(put);<a name="line.542"></a>
-<span class="sourceLineNo">543</span> }<a name="line.543"></a>
-<span class="sourceLineNo">544</span> Delete delete = new Delete(put.getRow());<a name="line.544"></a>
-<span class="sourceLineNo">545</span> htable2.delete(delete);<a name="line.545"></a>
-<span class="sourceLineNo">546</span><a name="line.546"></a>
-<span class="sourceLineNo">547</span> sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.547"></a>
-<span class="sourceLineNo">548</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.548"></a>
-<span class="sourceLineNo">549</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.549"></a>
-<span class="sourceLineNo">550</span><a name="line.550"></a>
-<span class="sourceLineNo">551</span> peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.551"></a>
-<span class="sourceLineNo">552</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.552"></a>
-<span class="sourceLineNo">553</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span> args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.555"></a>
-<span class="sourceLineNo">556</span> "--sourceSnapshotTmpDir=" + tmpPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.556"></a>
-<span class="sourceLineNo">557</span> "--peerSnapshotTmpDir=" + tmpPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.557"></a>
-<span class="sourceLineNo">558</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), utility2.getClusterKey(),<a name="line.558"></a>
-<span class="sourceLineNo">559</span> tableName.getNameAsString() };<a name="line.559"></a>
-<span class="sourceLineNo">560</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.560"></a>
-<span class="sourceLineNo">561</span> checkRestoreTmpDir(conf1, tmpPath1, 2);<a name="line.561"></a>
-<span class="sourceLineNo">562</span> checkRestoreTmpDir(conf2, tmpPath2, 2);<a name="line.562"></a>
-<span class="sourceLineNo">563</span> }<a name="line.563"></a>
-<span class="sourceLineNo">564</span>}<a name="line.564"></a>
+<span class="sourceLineNo">486</span> peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.486"></a>
+<span class="sourceLineNo">487</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.487"></a>
+<span class="sourceLineNo">488</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span> args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.490"></a>
+<span class="sourceLineNo">491</span> "--sourceSnapshotTmpDir=" + temPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.491"></a>
+<span class="sourceLineNo">492</span> "--peerSnapshotTmpDir=" + temPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.492"></a>
+<span class="sourceLineNo">493</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), "2", tableName.getNameAsString() };<a name="line.493"></a>
+<span class="sourceLineNo">494</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.494"></a>
+<span class="sourceLineNo">495</span> checkRestoreTmpDir(conf1, temPath1, 2);<a name="line.495"></a>
+<span class="sourceLineNo">496</span> checkRestoreTmpDir(conf2, temPath2, 2);<a name="line.496"></a>
+<span class="sourceLineNo">497</span> }<a name="line.497"></a>
+<span class="sourceLineNo">498</span><a name="line.498"></a>
+<span class="sourceLineNo">499</span> @Test<a name="line.499"></a>
+<span class="sourceLineNo">500</span> public void testVerifyRepJobWithQuorumAddress() throws Exception {<a name="line.500"></a>
+<span class="sourceLineNo">501</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.501"></a>
+<span class="sourceLineNo">502</span> // identical since it does the check<a name="line.502"></a>
+<span class="sourceLineNo">503</span> runSmallBatchTest();<a name="line.503"></a>
+<span class="sourceLineNo">504</span><a name="line.504"></a>
+<span class="sourceLineNo">505</span> // with a quorum address (a cluster key)<a name="line.505"></a>
+<span class="sourceLineNo">506</span> String[] args = new String[] { utility2.getClusterKey(), tableName.getNameAsString() };<a name="line.506"></a>
+<span class="sourceLineNo">507</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span> Scan scan = new Scan();<a name="line.509"></a>
+<span class="sourceLineNo">510</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.510"></a>
+<span class="sourceLineNo">511</span> Put put = null;<a name="line.511"></a>
+<span class="sourceLineNo">512</span> for (Result result : rs) {<a name="line.512"></a>
+<span class="sourceLineNo">513</span> put = new Put(result.getRow());<a name="line.513"></a>
+<span class="sourceLineNo">514</span> Cell firstVal = result.rawCells()[0];<a name="line.514"></a>
+<span class="sourceLineNo">515</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.515"></a>
+<span class="sourceLineNo">516</span> Bytes.toBytes("diff data"));<a name="line.516"></a>
+<span class="sourceLineNo">517</span> htable2.put(put);<a name="line.517"></a>
+<span class="sourceLineNo">518</span> }<a name="line.518"></a>
+<span class="sourceLineNo">519</span> Delete delete = new Delete(put.getRow());<a name="line.519"></a>
+<span class="sourceLineNo">520</span> htable2.delete(delete);<a name="line.520"></a>
+<span class="sourceLineNo">521</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.521"></a>
+<span class="sourceLineNo">522</span> }<a name="line.522"></a>
+<span class="sourceLineNo">523</span><a name="line.523"></a>
+<span class="sourceLineNo">524</span> @Test<a name="line.524"></a>
+<span class="sourceLineNo">525</span> public void testVerifyRepJobWithQuorumAddressAndSnapshotSupport() throws Exception {<a name="line.525"></a>
+<span class="sourceLineNo">526</span> // Populate the tables, at the same time it guarantees that the tables are<a name="line.526"></a>
+<span class="sourceLineNo">527</span> // identical since it does the check<a name="line.527"></a>
+<span class="sourceLineNo">528</span> runSmallBatchTest();<a name="line.528"></a>
+<span class="sourceLineNo">529</span><a name="line.529"></a>
+<span class="sourceLineNo">530</span> // Take source and target tables snapshot<a name="line.530"></a>
+<span class="sourceLineNo">531</span> Path rootDir = FSUtils.getRootDir(conf1);<a name="line.531"></a>
+<span class="sourceLineNo">532</span> FileSystem fs = rootDir.getFileSystem(conf1);<a name="line.532"></a>
+<span class="sourceLineNo">533</span> String sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.533"></a>
+<span class="sourceLineNo">534</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.534"></a>
+<span class="sourceLineNo">535</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span> // Take target snapshot<a name="line.537"></a>
+<span class="sourceLineNo">538</span> Path peerRootDir = FSUtils.getRootDir(conf2);<a name="line.538"></a>
+<span class="sourceLineNo">539</span> FileSystem peerFs = peerRootDir.getFileSystem(conf2);<a name="line.539"></a>
+<span class="sourceLineNo">540</span> String peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.540"></a>
+<span class="sourceLineNo">541</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.541"></a>
+<span class="sourceLineNo">542</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.542"></a>
+<span class="sourceLineNo">543</span><a name="line.543"></a>
+<span class="sourceLineNo">544</span> String peerFSAddress = peerFs.getUri().toString();<a name="line.544"></a>
+<span class="sourceLineNo">545</span> String tmpPath1 = utility1.getRandomDir().toString();<a name="line.545"></a>
+<span class="sourceLineNo">546</span> String tmpPath2 = "/tmp" + System.currentTimeMillis();<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span> String[] args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.548"></a>
+<span class="sourceLineNo">549</span> "--sourceSnapshotTmpDir=" + tmpPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.549"></a>
+<span class="sourceLineNo">550</span> "--peerSnapshotTmpDir=" + tmpPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.550"></a>
+<span class="sourceLineNo">551</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), utility2.getClusterKey(),<a name="line.551"></a>
+<span class="sourceLineNo">552</span> tableName.getNameAsString() };<a name="line.552"></a>
+<span class="sourceLineNo">553</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.553"></a>
+<span class="sourceLineNo">554</span> checkRestoreTmpDir(conf1, tmpPath1, 1);<a name="line.554"></a>
+<span class="sourceLineNo">555</span> checkRestoreTmpDir(conf2, tmpPath2, 1);<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span> Scan scan = new Scan();<a name="line.557"></a>
+<span class="sourceLineNo">558</span> ResultScanner rs = htable2.getScanner(scan);<a name="line.558"></a>
+<span class="sourceLineNo">559</span> Put put = null;<a name="line.559"></a>
+<span class="sourceLineNo">560</span> for (Result result : rs) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span> put = new Put(result.getRow());<a name="line.561"></a>
+<span class="sourceLineNo">562</span> Cell firstVal = result.rawCells()[0];<a name="line.562"></a>
+<span class="sourceLineNo">563</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.563"></a>
+<span class="sourceLineNo">564</span> Bytes.toBytes("diff data"));<a name="line.564"></a>
+<span class="sourceLineNo">565</span> htable2.put(put);<a name="line.565"></a>
+<span class="sourceLineNo">566</span> }<a name="line.566"></a>
+<span class="sourceLineNo">567</span> Delete delete = new Delete(put.getRow());<a name="line.567"></a>
+<span class="sourceLineNo">568</span> htable2.delete(delete);<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span> sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.570"></a>
+<span class="sourceLineNo">571</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.571"></a>
+<span class="sourceLineNo">572</span> Bytes.toString(famName), sourceSnapshotName, rootDir, fs, true);<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span> peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.574"></a>
+<span class="sourceLineNo">575</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), tableName,<a name="line.575"></a>
+<span class="sourceLineNo">576</span> Bytes.toString(famName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.576"></a>
+<span class="sourceLineNo">577</span><a name="line.577"></a>
+<span class="sourceLineNo">578</span> args = new String[] { "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.578"></a>
+<span class="sourceLineNo">579</span> "--sourceSnapshotTmpDir=" + tmpPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.579"></a>
+<span class="sourceLineNo">580</span> "--peerSnapshotTmpDir=" + tmpPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.580"></a>
+<span class="sourceLineNo">581</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), utility2.getClusterKey(),<a name="line.581"></a>
+<span class="sourceLineNo">582</span> tableName.getNameAsString() };<a name="line.582"></a>
+<span class="sourceLineNo">583</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.583"></a>
+<span class="sourceLineNo">584</span> checkRestoreTmpDir(conf1, tmpPath1, 2);<a name="line.584"></a>
+<span class="sourceLineNo">585</span> checkRestoreTmpDir(conf2, tmpPath2, 2);<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> private static void runBatchCopyTest() throws Exception {<a name="line.588"></a>
+<span class="sourceLineNo">589</span> // normal Batch tests for htable1<a name="line.589"></a>
+<span class="sourceLineNo">590</span> loadData("", row, noRepfamName);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span> Scan scan1 = new Scan();<a name="line.592"></a>
+<span class="sourceLineNo">593</span> List<Put> puts = new ArrayList<>(NB_ROWS_IN_BATCH);<a name="line.593"></a>
+<span class="sourceLineNo">594</span> ResultScanner scanner1 = htable1.getScanner(scan1);<a name="line.594"></a>
+<span class="sourceLineNo">595</span> Result[] res1 = scanner1.next(NB_ROWS_IN_BATCH);<a name="line.595"></a>
+<span class="sourceLineNo">596</span> for (Result result : res1) {<a name="line.596"></a>
+<span class="sourceLineNo">597</span> Put put = new Put(result.getRow());<a name="line.597"></a>
+<span class="sourceLineNo">598</span> for (Cell cell : result.rawCells()) {<a name="line.598"></a>
+<span class="sourceLineNo">599</span> put.add(cell);<a name="line.599"></a>
+<span class="sourceLineNo">600</span> }<a name="line.600"></a>
+<span class="sourceLineNo">601</span> puts.add(put);<a name="line.601"></a>
+<span class="sourceLineNo">602</span> }<a name="line.602"></a>
+<span class="sourceLineNo">603</span> scanner1.close();<a name="line.603"></a>
+<span class="sourceLineNo">604</span> assertEquals(NB_ROWS_IN_BATCH, res1.length);<a name="line.604"></a>
+<span class="sourceLineNo">605</span><a name="line.605"></a>
+<span class="sourceLineNo">606</span> // Copy the data to htable3<a name="line.606"></a>
+<span class="sourceLineNo">607</span> htable3.put(puts);<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span> Scan scan2 = new Scan();<a name="line.609"></a>
+<span class="sourceLineNo">610</span> ResultScanner scanner2 = htable3.getScanner(scan2);<a name="line.610"></a>
+<span class="sourceLineNo">611</span> Result[] res2 = scanner2.next(NB_ROWS_IN_BATCH);<a name="line.611"></a>
+<span class="sourceLineNo">612</span> scanner2.close();<a name="line.612"></a>
+<span class="sourceLineNo">613</span> assertEquals(NB_ROWS_IN_BATCH, res2.length);<a name="line.613"></a>
+<span class="sourceLineNo">614</span> }<a name="line.614"></a>
+<span class="sourceLineNo">615</span><a name="line.615"></a>
+<span class="sourceLineNo">616</span> @Test<a name="line.616"></a>
+<span class="sourceLineNo">617</span> public void testVerifyRepJobWithPeerTableName() throws Exception {<a name="line.617"></a>
+<span class="sourceLineNo">618</span> // Populate the tables with same data<a name="line.618"></a>
+<span class="sourceLineNo">619</span> runBatchCopyTest();<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span> // with a peerTableName along with quorum address (a cluster key)<a name="line.621"></a>
+<span class="sourceLineNo">622</span> String[] args = new String[] { "--peerTableName=" + peerTableName.getNameAsString(),<a name="line.622"></a>
+<span class="sourceLineNo">623</span> utility2.getClusterKey(), tableName.getNameAsString() };<a name="line.623"></a>
+<span class="sourceLineNo">624</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span> utility2.deleteTableData(peerTableName);<a name="line.626"></a>
+<span class="sourceLineNo">627</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.627"></a>
+<span class="sourceLineNo">628</span> }<a name="line.628"></a>
+<span class="sourceLineNo">629</span><a name="line.629"></a>
+<span class="sourceLineNo">630</span> @Test<a name="line.630"></a>
+<span class="sourceLineNo">631</span> public void testVerifyRepJobWithPeerTableNameAndSnapshotSupport() throws Exception {<a name="line.631"></a>
+<span class="sourceLineNo">632</span> // Populate the tables with same data<a name="line.632"></a>
+<span class="sourceLineNo">633</span> runBatchCopyTest();<a name="line.633"></a>
+<span class="sourceLineNo">634</span><a name="line.634"></a>
+<span class="sourceLineNo">635</span> // Take source and target tables snapshot<a name="line.635"></a>
+<span class="sourceLineNo">636</span> Path rootDir = FSUtils.getRootDir(conf1);<a name="line.636"></a>
+<span class="sourceLineNo">637</span> FileSystem fs = rootDir.getFileSystem(conf1);<a name="line.637"></a>
+<span class="sourceLineNo">638</span> String sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.638"></a>
+<span class="sourceLineNo">639</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.639"></a>
+<span class="sourceLineNo">640</span> Bytes.toString(noRepfamName), sourceSnapshotName, rootDir, fs, true);<a name="line.640"></a>
+<span class="sourceLineNo">641</span><a name="line.641"></a>
+<span class="sourceLineNo">642</span> // Take target snapshot<a name="line.642"></a>
+<span class="sourceLineNo">643</span> Path peerRootDir = FSUtils.getRootDir(conf2);<a name="line.643"></a>
+<span class="sourceLineNo">644</span> FileSystem peerFs = peerRootDir.getFileSystem(conf2);<a name="line.644"></a>
+<span class="sourceLineNo">645</span> String peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.645"></a>
+<span class="sourceLineNo">646</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), peerTableName,<a name="line.646"></a>
+<span class="sourceLineNo">647</span> Bytes.toString(noRepfamName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.647"></a>
+<span class="sourceLineNo">648</span><a name="line.648"></a>
+<span class="sourceLineNo">649</span> String peerFSAddress = peerFs.getUri().toString();<a name="line.649"></a>
+<span class="sourceLineNo">650</span> String tmpPath1 = utility1.getRandomDir().toString();<a name="line.650"></a>
+<span class="sourceLineNo">651</span> String tmpPath2 = "/tmp" + System.currentTimeMillis();<a name="line.651"></a>
+<span class="sourceLineNo">652</span><a name="line.652"></a>
+<span class="sourceLineNo">653</span> String[] args = new String[] { "--peerTableName=" + peerTableName.getNameAsString(),<a name="line.653"></a>
+<span class="sourceLineNo">654</span> "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.654"></a>
+<span class="sourceLineNo">655</span> "--sourceSnapshotTmpDir=" + tmpPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.655"></a>
+<span class="sourceLineNo">656</span> "--peerSnapshotTmpDir=" + tmpPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.656"></a>
+<span class="sourceLineNo">657</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), utility2.getClusterKey(),<a name="line.657"></a>
+<span class="sourceLineNo">658</span> tableName.getNameAsString() };<a name="line.658"></a>
+<span class="sourceLineNo">659</span> runVerifyReplication(args, NB_ROWS_IN_BATCH, 0);<a name="line.659"></a>
+<span class="sourceLineNo">660</span> checkRestoreTmpDir(conf1, tmpPath1, 1);<a name="line.660"></a>
+<span class="sourceLineNo">661</span> checkRestoreTmpDir(conf2, tmpPath2, 1);<a name="line.661"></a>
+<span class="sourceLineNo">662</span><a name="line.662"></a>
+<span class="sourceLineNo">663</span> Scan scan = new Scan();<a name="line.663"></a>
+<span class="sourceLineNo">664</span> ResultScanner rs = htable3.getScanner(scan);<a name="line.664"></a>
+<span class="sourceLineNo">665</span> Put put = null;<a name="line.665"></a>
+<span class="sourceLineNo">666</span> for (Result result : rs) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span> put = new Put(result.getRow());<a name="line.667"></a>
+<span class="sourceLineNo">668</span> Cell firstVal = result.rawCells()[0];<a name="line.668"></a>
+<span class="sourceLineNo">669</span> put.addColumn(CellUtil.cloneFamily(firstVal), CellUtil.cloneQualifier(firstVal),<a name="line.669"></a>
+<span class="sourceLineNo">670</span> Bytes.toBytes("diff data"));<a name="line.670"></a>
+<span class="sourceLineNo">671</span> htable3.put(put);<a name="line.671"></a>
+<span class="sourceLineNo">672</span> }<a name="line.672"></a>
+<span class="sourceLineNo">673</span> Delete delete = new Delete(put.getRow());<a name="line.673"></a>
+<span class="sourceLineNo">674</span> htable3.delete(delete);<a name="line.674"></a>
+<span class="sourceLineNo">675</span><a name="line.675"></a>
+<span class="sourceLineNo">676</span> sourceSnapshotName = "sourceSnapshot-" + System.currentTimeMillis();<a name="line.676"></a>
+<span class="sourceLineNo">677</span> SnapshotTestingUtils.createSnapshotAndValidate(utility1.getAdmin(), tableName,<a name="line.677"></a>
+<span class="sourceLineNo">678</span> Bytes.toString(noRepfamName), sourceSnapshotName, rootDir, fs, true);<a name="line.678"></a>
+<span class="sourceLineNo">679</span><a name="line.679"></a>
+<span class="sourceLineNo">680</span> peerSnapshotName = "peerSnapshot-" + System.currentTimeMillis();<a name="line.680"></a>
+<span class="sourceLineNo">681</span> SnapshotTestingUtils.createSnapshotAndValidate(utility2.getAdmin(), peerTableName,<a name="line.681"></a>
+<span class="sourceLineNo">682</span> Bytes.toString(noRepfamName), peerSnapshotName, peerRootDir, peerFs, true);<a name="line.682"></a>
+<span class="sourceLineNo">683</span><a name="line.683"></a>
+<span class="sourceLineNo">684</span> args = new String[] { "--peerTableName=" + peerTableName.getNameAsString(),<a name="line.684"></a>
+<span class="sourceLineNo">685</span> "--sourceSnapshotName=" + sourceSnapshotName,<a name="line.685"></a>
+<span class="sourceLineNo">686</span> "--sourceSnapshotTmpDir=" + tmpPath1, "--peerSnapshotName=" + peerSnapshotName,<a name="line.686"></a>
+<span class="sourceLineNo">687</span> "--peerSnapshotTmpDir=" + tmpPath2, "--peerFSAddress=" + peerFSAddress,<a name="line.687"></a>
+<span class="sourceLineNo">688</span> "--peerHBaseRootAddress=" + FSUtils.getRootDir(conf2), utility2.getClusterKey(),<a name="line.688"></a>
+<span class="sourceLineNo">689</span> tableName.getNameAsString() };<a name="line.689"></a>
+<span class="sourceLineNo">690</span> runVerifyReplication(args, 0, NB_ROWS_IN_BATCH);<a name="line.690"></a>
+<span class="sourceLineNo">691</span> checkRestoreTmpDir(conf1, tmpPath1, 2);<a name="line.691"></a>
+<span class="sourceLineNo">692</span> checkRestoreTmpDir(conf2, tmpPath2, 2);<a name="line.692"></a>
+<span class="sourceLineNo">693</span> }<a name="line.693"></a>
+<span class="sourceLineNo">694</span><a name="line.694"></a>
+<span class="sourceLineNo">695</span> @AfterClass<a name="line.695"></a>
+<span class="sourceLineNo">696</span> public static void tearDownAfterClass() throws Exception {<a name="line.696"></a>
+<span class="sourceLineNo">697</span> htable3.close();<a name="line.697"></a>
+<span class="sourceLineNo">698</span> TestReplicationBase.tearDownAfterClass();<a name="line.698"></a>
+<span class="sourceLineNo">699</span> }<a name="line.699"></a>
+<span class="sourceLineNo">700</span>}<a name="line.700"></a>