Published site at 7755d4beeddfee9b72446ccd18d7918278eecc83.
authorjenkins <builds@apache.org>
Sat, 29 Dec 2018 14:50:36 +0000 (14:50 +0000)
committerjenkins <builds@apache.org>
Sat, 29 Dec 2018 14:50:36 +0000 (14:50 +0000)
54 files changed:
acid-semantics.html
apache_hbase_reference_guide.pdf
book.html
bulk-loads.html
checkstyle-aggregate.html
coc.html
dependencies.html
dependency-convergence.html
dependency-info.html
dependency-management.html
devapidocs/constant-values.html
devapidocs/src-html/org/apache/hadoop/hbase/Version.html
downloads.html
export_control.html
index.html
integration.html
issue-tracking.html
license.html
mail-lists.html
metrics.html
old_news.html
plugin-management.html
plugins.html
poweredbyhbase.html
project-info.html
project-reports.html
project-summary.html
pseudo-distributed.html
replication.html
resources.html
source-repository.html
sponsors.html
supportingprojects.html
team-list.html
testdevapidocs/index-all.html
testdevapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
testdevapidocs/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotMapper.html
testdevapidocs/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html
testdevapidocs/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html
testdevapidocs/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html
testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html
testdevapidocs/org/apache/hadoop/hbase/package-tree.html
testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotMapper.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.TestTableSnapshotCounters.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.TestTableSnapshotMapper.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html
testdevapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html

index 07d9f16..d05e9cb 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -611,7 +611,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 1e58016..3a3f8ce 100644 (file)
@@ -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:20181228143259+00'00')
-/CreationDate (D:20181228144829+00'00')
+/ModDate (D:20181229143206+00'00')
+/CreationDate (D:20181229144721+00'00')
 >>
 endobj
 2 0 obj
index cf3a146..670e22d 100644 (file)
--- a/book.html
+++ b/book.html
@@ -41411,7 +41411,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 2018-12-28 14:32:59 UTC
+Last updated 2018-12-29 14:32:06 UTC
 </div>
 </div>
 </body>
index 1527279..13127e1 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -316,7 +316,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 4b7e874..fca3cce 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Checkstyle Results</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
 <ul>
 <li>offset: <tt>&quot;2&quot;</tt></li></ul></td>
-<td>727</td>
+<td>726</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>3406</td>
+<td>3407</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
+<td>NonEmptyAtclauseDescription</td>
 <td>Javadoc comment at column 0 has parse error. Details: no viable alternative at input '   *' while parsing JAVADOC_TAG</td>
 <td>117</td></tr>
 <tr class="b">
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>263</td></tr></table></div>
+<td>264</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.mapreduce.CellCounter.java">org/apache/hadoop/hbase/mapreduce/CellCounter.java</h3>
 <table border="0" class="table table-striped">
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
-<td>166</td></tr></table></div>
+<td>161</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.mapreduce.TableSplit.java">org/apache/hadoop/hbase/mapreduce/TableSplit.java</h3>
 <table border="0" class="table table-striped">
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 970a1e5..373104c 100644 (file)
--- a/coc.html
+++ b/coc.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -385,7 +385,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 93f9682..e986d54 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependencies</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index bf53f9e..22dc9fc 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Reactor Dependency Convergence</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 0d59392..c970773 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Dependency Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index f3b8c8d..f972a72 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Dependency Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 40dbfd3..d58fd3d 100644 (file)
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Fri Dec 28 14:43:38 UTC 2018"</code></td>
+<td class="colLast"><code>"Sat Dec 29 14:42:27 UTC 2018"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
index 8e6a965..9163de0 100644 (file)
@@ -18,7 +18,7 @@
 <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 = "Fri Dec 28 14:43:38 UTC 2018";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Sat Dec 29 14:42:27 UTC 2018";<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 = "83d39d62a916c7f41733bd656057b75c";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
index 5dbcdab..797a4d0 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase Downloads</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -463,7 +463,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 3cdfad3..117522b 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -341,7 +341,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 9f1d849..1366159 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -421,7 +421,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 4c11a49..4affb81 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index e9336db..9663fc5 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 9e23072..e6c34bd 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 6fb6a6e..33cc54a 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 14a85e1..62e0a0f 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -469,7 +469,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 4872fc3..1b1c89a 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -450,7 +450,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 8523325..3725d92 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index a073195..14a603d 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 311359b..f2ac20f 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase\99</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -779,7 +779,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index c0f8b62..d432692 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Information</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index d132d54..38fae6e 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Generated Reports</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 86d1bfe..dfe3c56 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index c87f40d..ae4c000 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -318,7 +318,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 4015c4b..4a04dbb 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -313,7 +313,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 0f99855..d6c05ef 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -341,7 +341,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index a8b85fa..52eb38f 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index a61c333..c3127d3 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase\99 Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -343,7 +343,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 2da6f3d..9fac110 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
@@ -530,7 +530,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index 1f2f808..fabf7b9 100644 (file)
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20181228" />
+    <meta name="Date-Revision-yyyymmdd" content="20181229" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.4-HBase.min.css" />
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2018-12-28</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2018-12-29</li>
             </p>
                 </div>
 
index aa8e00d..100af33 100644 (file)
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#testWithMapReduceImpl-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-java.lang.String-org.apache.hadoop.fs.Path-int-int-int-boolean-">testWithMapReduceImpl(HBaseTestingUtility, TableName, String, Path, int, int, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableSnapshotInputFormat</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatTestBase</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion()</a></span> - Method in class org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html" title="class in org.apache.hadoop.hbase.mapred">TestTableSnapshotInputFormat</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">TestTableSnapshotInputFormat</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#testWithMapReduceMultiRegion--">testWithMapReduceMultiRegion()</a></span> - Method in class org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html" title="class in org.apache.hadoop.hbase.mapred">TestTableSnapshotInputFormat</a></dt>
 <dd>&nbsp;</dd>
index 4837d80..ec56445 100644 (file)
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<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>
+<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>
 </ul>
 </li>
 </ul>
index bd9b7bb..95576bd 100644 (file)
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.80">TestTableSnapshotInputFormat.TestTableSnapshotMapper</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.81">TestTableSnapshotInputFormat.TestTableSnapshotMapper</a>
 extends org.apache.hadoop.mapred.MapReduceBase
 implements org.apache.hadoop.hbase.mapred.TableMap&lt;org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.io.NullWritable&gt;</pre>
 </li>
@@ -216,7 +216,7 @@ implements org.apache.hadoop.hbase.mapred.TableMap&lt;org.apache.hadoop.hbase.io
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestTableSnapshotMapper</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotMapper.html#line.80">TestTableSnapshotMapper</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotMapper.html#line.81">TestTableSnapshotMapper</a>()</pre>
 </li>
 </ul>
 </li>
@@ -233,7 +233,7 @@ implements org.apache.hadoop.hbase.mapred.TableMap&lt;org.apache.hadoop.hbase.io
 <ul class="blockListLast">
 <li class="blockList">
 <h4>map</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotMapper.html#line.83">map</a>(org.apache.hadoop.hbase.io.ImmutableBytesWritable&nbsp;key,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotMapper.html#line.84">map</a>(org.apache.hadoop.hbase.io.ImmutableBytesWritable&nbsp;key,
                 org.apache.hadoop.hbase.client.Result&nbsp;value,
                 org.apache.hadoop.mapred.OutputCollector&lt;org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.io.NullWritable&gt;&nbsp;collector,
                 org.apache.hadoop.mapred.Reporter&nbsp;reporter)
index e1e8374..14a2e77 100644 (file)
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.91">TestTableSnapshotInputFormat.TestTableSnapshotReducer</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.92">TestTableSnapshotInputFormat.TestTableSnapshotReducer</a>
 extends org.apache.hadoop.mapred.MapReduceBase
 implements org.apache.hadoop.mapred.Reducer&lt;org.apache.hadoop.hbase.io.ImmutableBytesWritable,org.apache.hadoop.io.NullWritable,org.apache.hadoop.io.NullWritable,org.apache.hadoop.io.NullWritable&gt;</pre>
 </li>
@@ -232,7 +232,7 @@ implements org.apache.hadoop.mapred.Reducer&lt;org.apache.hadoop.hbase.io.Immuta
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rowTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility.SeenRowTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.93">rowTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.SeenRowTracker.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility.SeenRowTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.94">rowTracker</a></pre>
 </li>
 </ul>
 </li>
@@ -249,7 +249,7 @@ implements org.apache.hadoop.mapred.Reducer&lt;org.apache.hadoop.hbase.io.Immuta
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestTableSnapshotReducer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.91">TestTableSnapshotReducer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.92">TestTableSnapshotReducer</a>()</pre>
 </li>
 </ul>
 </li>
@@ -266,7 +266,7 @@ implements org.apache.hadoop.mapred.Reducer&lt;org.apache.hadoop.hbase.io.Immuta
 <ul class="blockList">
 <li class="blockList">
 <h4>reduce</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.97">reduce</a>(org.apache.hadoop.hbase.io.ImmutableBytesWritable&nbsp;key,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.98">reduce</a>(org.apache.hadoop.hbase.io.ImmutableBytesWritable&nbsp;key,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;org.apache.hadoop.io.NullWritable&gt;&nbsp;values,
                    org.apache.hadoop.mapred.OutputCollector&lt;org.apache.hadoop.io.NullWritable,org.apache.hadoop.io.NullWritable&gt;&nbsp;collector,
                    org.apache.hadoop.mapred.Reporter&nbsp;reporter)
@@ -285,7 +285,7 @@ implements org.apache.hadoop.mapred.Reducer&lt;org.apache.hadoop.hbase.io.Immuta
 <ul class="blockListLast">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.104">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.TestTableSnapshotReducer.html#line.105">close</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true#close--" title="class or interface in java.io">close</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></code></dd>
index bdbfbb5..8b74787 100644 (file)
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var methods = {"i0":9,"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"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -114,7 +114,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.56">TestTableSnapshotInputFormat</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.57">TestTableSnapshotInputFormat</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatTestBase</a></pre>
 </li>
 </ul>
@@ -264,9 +264,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 </tr>
 <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/mapred/TestTableSnapshotInputFormat.html#testWithMapReduceMultiRegion--">testWithMapReduceMultiRegion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion</a></span>()</code>&nbsp;</td>
 </tr>
 <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/mapred/TestTableSnapshotInputFormat.html#testWithMapReduceMultiRegion--">testWithMapReduceMultiRegion</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#testWithMockedMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-int-int-int-boolean-">testWithMockedMapReduce</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
@@ -275,11 +279,11 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
                        int&nbsp;expectedNumSplits,
                        boolean&nbsp;setLocalityEnabledTo)</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<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/mapred/TestTableSnapshotInputFormat.html#testWithMockedMapReduceMultiRegion--">testWithMockedMapReduceMultiRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#verifyWithMockedMapReduce-org.apache.hadoop.mapred.JobConf-int-int-byte:A-byte:A-">verifyWithMockedMapReduce</a></span>(org.apache.hadoop.mapred.JobConf&nbsp;job,
                          int&nbsp;numRegions,
@@ -293,7 +297,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#createTableAndSnapshot-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-int-">createTableAndSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#setupCluster--">setupCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#tearDownCluster--">tearDownCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testRestoreSnapshotDoesNotCreateBackRefLinks--">testRestoreSnapshotDoesNotCreateBackRefLinks</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-int-int-int-boolean-">testWithMapReduce</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceSingleRegion--">testWithMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceSingleRegion--">testWithMockedMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#verifyRowFromMap-org.apache.hadoop.hbase.io.ImmutableBytesWritable-org.apache.hadoop.hbase.client.Result-">verifyRowFromMap</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#createTableAndSnapshot-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-int-">createTableAndSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#setupCluster--">setupCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#tearDownCluster--">tearDownCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testRestoreSnapshotDoesNotCreateBackRefLinks--">testRestoreSnapshotDoesNotCreateBackRefLinks</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-int-int-int-boolean-">testWithMapReduce</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceSingleRegion--">testWithMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceSingleRegion--">testWithMockedMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#verifyRowFromMap-org.apache.hadoop.hbase.io.ImmutableBytesWritable-org.apache.hadoop.hbase.client.Result-">verifyRowFromMap</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -322,7 +326,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<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/mapred/TestTableSnapshotInputFormat.html#line.59">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<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/mapred/TestTableSnapshotInputFormat.html#line.60">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="aaa">
@@ -331,7 +335,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>aaa</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.62">aaa</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.63">aaa</a></pre>
 </li>
 </ul>
 <a name="after_zzz">
@@ -340,7 +344,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>after_zzz</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.63">after_zzz</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.64">after_zzz</a></pre>
 </li>
 </ul>
 <a name="COLUMNS">
@@ -349,7 +353,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>COLUMNS</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.64">COLUMNS</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.65">COLUMNS</a></pre>
 </li>
 </ul>
 <a name="name">
@@ -358,7 +362,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockListLast">
 <li class="blockList">
 <h4>name</h4>
-<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.68">name</a></pre>
+<pre>public&nbsp;org.junit.rules.TestName <a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.69">name</a></pre>
 </li>
 </ul>
 </li>
@@ -375,7 +379,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestTableSnapshotInputFormat</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.56">TestTableSnapshotInputFormat</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.57">TestTableSnapshotInputFormat</a>()</pre>
 </li>
 </ul>
 </li>
@@ -392,7 +396,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartRow</h4>
-<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.71">getStartRow</a>()</pre>
+<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.72">getStartRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#getStartRow--">getStartRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatTestBase</a></code></dd>
@@ -405,7 +409,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>getEndRow</h4>
-<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.76">getEndRow</a>()</pre>
+<pre>protected&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.77">getEndRow</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#getEndRow--">getEndRow</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatTestBase</a></code></dd>
@@ -418,7 +422,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>testInitTableSnapshotMapperJobConfig</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.110">testInitTableSnapshotMapperJobConfig</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.111">testInitTableSnapshotMapperJobConfig</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>
@@ -432,7 +436,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>testWithMockedMapReduceMultiRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.145">testWithMockedMapReduceMultiRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.146">testWithMockedMapReduceMultiRegion</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="overrideSpecifyLabel">Overrides:</span></dt>
@@ -448,7 +452,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>testWithMapReduceMultiRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.154">testWithMapReduceMultiRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.155">testWithMapReduceMultiRegion</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="overrideSpecifyLabel">Overrides:</span></dt>
@@ -464,7 +468,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>testWithMapReduceAndOfflineHBaseMultiRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.161">testWithMapReduceAndOfflineHBaseMultiRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.162">testWithMapReduceAndOfflineHBaseMultiRegion</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="overrideSpecifyLabel">Overrides:</span></dt>
@@ -480,7 +484,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>testRestoreSnapshotDoesNotCreateBackRefLinksInit</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.166">testRestoreSnapshotDoesNotCreateBackRefLinksInit</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.167">testRestoreSnapshotDoesNotCreateBackRefLinksInit</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                                              org.apache.hadoop.fs.Path&nbsp;tmpTableDir)
                                                       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>
@@ -498,7 +502,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>testWithMockedMapReduce</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.175">testWithMockedMapReduce</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.176">testWithMockedMapReduce</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                        int&nbsp;numRegions,
                                        int&nbsp;numSplitsPerRegion,
@@ -519,7 +523,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyWithMockedMapReduce</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.211">verifyWithMockedMapReduce</a>(org.apache.hadoop.mapred.JobConf&nbsp;job,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.212">verifyWithMockedMapReduce</a>(org.apache.hadoop.mapred.JobConf&nbsp;job,
                                        int&nbsp;numRegions,
                                        int&nbsp;expectedNumSplits,
                                        byte[]&nbsp;startRow,
@@ -539,7 +543,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <ul class="blockList">
 <li class="blockList">
 <h4>testWithMapReduceImpl</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.262">testWithMapReduceImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.263">testWithMapReduceImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                                      org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                      org.apache.hadoop.fs.Path&nbsp;tableDir,
@@ -559,10 +563,10 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <a name="doTestWithMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-org.apache.hadoop.fs.Path-int-int-int-boolean-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>doTestWithMapReduce</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.270">doTestWithMapReduce</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.271">doTestWithMapReduce</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                                        org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                        byte[]&nbsp;startRow,
@@ -579,6 +583,20 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 </dl>
 </li>
 </ul>
+<a name="testWithMapReduceMultipleMappersPerRegion--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testWithMapReduceMultipleMappersPerRegion</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapred/TestTableSnapshotInputFormat.html#line.317">testWithMapReduceMultipleMappersPerRegion</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>
index d7e1cd0..88637f5 100644 (file)
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":6,"i2":6,"i3":10,"i4":9,"i5":10,"i6":10,"i7":6,"i8":10,"i9":10,"i10":6,"i11":10,"i12":10,"i13":10,"i14":6,"i15":10,"i16":10,"i17":9};
+var methods = {"i0":9,"i1":6,"i2":6,"i3":10,"i4":9,"i5":10,"i6":10,"i7":6,"i8":10,"i9":10,"i10":6,"i11":10,"i12":10,"i13":6,"i14":10,"i15":10,"i16":9};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -254,17 +254,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <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/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion</a></span>()</code>&nbsp;</td>
-</tr>
-<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/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceMultiRegion--">testWithMapReduceMultiRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" 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/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceSingleRegion--">testWithMapReduceSingleRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>protected abstract void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-int-int-int-boolean-">testWithMockedMapReduce</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
@@ -273,15 +269,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
                        int&nbsp;expectedNumSplits,
                        boolean&nbsp;setLocalityEnabledTo)</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceMultiRegion--">testWithMockedMapReduceMultiRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i16" 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/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceSingleRegion--">testWithMockedMapReduceSingleRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#verifyRowFromMap-org.apache.hadoop.hbase.io.ImmutableBytesWritable-org.apache.hadoop.hbase.client.Result-">verifyRowFromMap</a></span>(org.apache.hadoop.hbase.io.ImmutableBytesWritable&nbsp;key,
                 org.apache.hadoop.hbase.client.Result&nbsp;result)</code>&nbsp;</td>
@@ -542,27 +538,13 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="testWithMapReduceMultipleMappersPerRegion--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>testWithMapReduceMultipleMappersPerRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.111">testWithMapReduceMultipleMappersPerRegion</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="testWithMapReduceAndOfflineHBaseMultiRegion--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>testWithMapReduceAndOfflineHBaseMultiRegion</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.117">testWithMapReduceAndOfflineHBaseMultiRegion</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.112">testWithMapReduceAndOfflineHBaseMultiRegion</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>
@@ -576,7 +558,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRestoreSnapshotDoesNotCreateBackRefLinks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.123">testRestoreSnapshotDoesNotCreateBackRefLinks</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.118">testRestoreSnapshotDoesNotCreateBackRefLinks</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>
@@ -590,7 +572,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testRestoreSnapshotDoesNotCreateBackRefLinksInit</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.162">testRestoreSnapshotDoesNotCreateBackRefLinksInit</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.157">testRestoreSnapshotDoesNotCreateBackRefLinksInit</a>(org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                                                       org.apache.hadoop.fs.Path&nbsp;tmpTableDir)
                                                                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>
@@ -606,7 +588,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testWithMapReduce</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.165">testWithMapReduce</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.160">testWithMapReduce</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                  int&nbsp;numRegions,
                                  int&nbsp;numSplitsPerRegion,
@@ -625,7 +607,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyRowFromMap</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.178">verifyRowFromMap</a>(org.apache.hadoop.hbase.io.ImmutableBytesWritable&nbsp;key,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.173">verifyRowFromMap</a>(org.apache.hadoop.hbase.io.ImmutableBytesWritable&nbsp;key,
                                        org.apache.hadoop.hbase.client.Result&nbsp;result)
                                 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>
@@ -640,7 +622,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createTableAndSnapshot</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.197">createTableAndSnapshot</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#line.192">createTableAndSnapshot</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                                              org.apache.hadoop.hbase.TableName&nbsp;tableName,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                              byte[]&nbsp;startRow,
index d30900d..7591bdb 100644 (file)
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
+var methods = {"i0":9,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -284,6 +284,10 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 </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/mapreduce/TestTableSnapshotInputFormat.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion</a></span>()</code>&nbsp;</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/mapreduce/TestTableSnapshotInputFormat.html#testWithMockedMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-int-int-int-boolean-">testWithMockedMapReduce</a></span>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                        int&nbsp;numRegions,
@@ -291,15 +295,15 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
                        int&nbsp;expectedNumSplits,
                        boolean&nbsp;setLocalityEnabledTo)</code>&nbsp;</td>
 </tr>
-<tr id="i10" 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/mapreduce/TestTableSnapshotInputFormat.html#testWithMockedMapReduceWithNoStartRowStopRow--">testWithMockedMapReduceWithNoStartRowStopRow</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" 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/mapreduce/TestTableSnapshotInputFormat.html#testWithMockedMapReduceWithSplitsPerRegion--">testWithMockedMapReduceWithSplitsPerRegion</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#verifyWithMockedMapReduce-org.apache.hadoop.mapreduce.Job-int-int-byte:A-byte:A-">verifyWithMockedMapReduce</a></span>(org.apache.hadoop.mapreduce.Job&nbsp;job,
                          int&nbsp;numRegions,
@@ -313,7 +317,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html" title="class in org.apache.hadoop.hbase.mapreduce">TableSnapshotInputFormatTestBase</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#createTableAndSnapshot-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-int-">createTableAndSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#setupCluster--">setupCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#tearDownCluster--">tearDownCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testRestoreSnapshotDoesNotCreateBackRefLinks--">testRestoreSnapshotDoesNotCreateBackRefLinks</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-int-int-int-boolean-">testWithMapReduce</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceAndOfflineHBaseMultiRegion--">testWithMapReduceAndOfflineHBaseMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceMultipleMappersPerRegion--">testWithMapReduceMultipleMappersPerRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceMultiRegion--">testWithMapReduceMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceSingleRegion--">testWithMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceMultiRegion--">testWithMockedMapReduceMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceSingleRegion--">testWithMockedMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#verifyRowFromMap-org.apache.hadoop.hbase.io.ImmutableBytesWritable-org.apache.hadoop.hbase.client.Result-">verifyRowFromMap</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#createTableAndSnapshot-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-int-">createTableAndSnapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#setupCluster--">setupCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#tearDownCluster--">tearDownCluster</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testRestoreSnapshotDoesNotCreateBackRefLinks--">testRestoreSnapshotDoesNotCreateBackRefLinks</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-java.lang.String-int-int-int-boolean-">testWithMapReduce</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceAndOfflineHBaseMultiRegion--">testWithMapReduceAndOfflineHBaseMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceMultiRegion--">testWithMapReduceMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMapReduceSingleRegion--">testWithMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceMultiRegion--">testWithMockedMapReduceMultiRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#testWithMockedMapReduceSingleRegion--">testWithMockedMapReduceSingleRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatTestBase.html#verifyRowFromMap-org.apache.hadoop.hbase.io.ImmutableBytesWritable-org.apache.hadoop.hbase.client.Result-">verifyRowFromMap</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -619,7 +623,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 <a name="doTestWithMapReduce-org.apache.hadoop.hbase.HBaseTestingUtility-org.apache.hadoop.hbase.TableName-java.lang.String-byte:A-byte:A-org.apache.hadoop.fs.Path-int-int-int-boolean-">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>doTestWithMapReduce</h4>
 <pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#line.430">doTestWithMapReduce</a>(<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a>&nbsp;util,
@@ -639,6 +643,20 @@ extends <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSnapshotI
 </dl>
 </li>
 </ul>
+<a name="testWithMapReduceMultipleMappersPerRegion--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testWithMapReduceMultipleMappersPerRegion</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableSnapshotInputFormat.html#line.478">testWithMapReduceMultipleMappersPerRegion</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>
index 97164d1..49fcd8f 100644 (file)
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<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/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/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/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/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/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/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/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/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/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/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/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 </ul>
 </li>
 </ul>
index 0673e84..c718ad9 100644 (file)
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<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/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/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>
 </ul>
 </li>
 </ul>
index aaac5fb..9735914 100644 (file)
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <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/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/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/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/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/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 </ul>
 </li>
 </ul>
index cb17cac..1499365 100644 (file)
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <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/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/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.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/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</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>
 </ul>
 </li>
 </ul>
index 2f75041..fb48d2e 100644 (file)
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<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/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>
 </ul>
 </li>
 </ul>
index 588a82d..0b6a065 100644 (file)
 <span class="sourceLineNo">047</span>import org.apache.hadoop.mapred.lib.NullOutputFormat;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.junit.Assert;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import org.junit.ClassRule;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Rule;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.rules.TestName;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public class TestTableSnapshotInputFormat extends TableSnapshotInputFormatTestBase {<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @ClassRule<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      HBaseClassTestRule.forClass(TestTableSnapshotInputFormat.class);<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final byte[] aaa = Bytes.toBytes("aaa");<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private static final byte[] after_zzz = Bytes.toBytes("zz{"); // 'z' + 1 =&gt; '{'<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final String COLUMNS =<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    Bytes.toString(FAMILIES[0]) + " " + Bytes.toString(FAMILIES[1]);<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  @Rule<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public TestName name = new TestName();<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  protected byte[] getStartRow() {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return aaa;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  @Override<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  protected byte[] getEndRow() {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    return after_zzz;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  static class TestTableSnapshotMapper extends MapReduceBase<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      implements TableMap&lt;ImmutableBytesWritable, NullWritable&gt; {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    @Override<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    public void map(ImmutableBytesWritable key, Result value,<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        OutputCollector&lt;ImmutableBytesWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        throws IOException {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      verifyRowFromMap(key, value);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      collector.collect(key, NullWritable.get());<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><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public static class TestTableSnapshotReducer extends MapReduceBase<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      implements Reducer&lt;ImmutableBytesWritable, NullWritable, NullWritable, NullWritable&gt; {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      new HBaseTestingUtility.SeenRowTracker(aaa, after_zzz);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void reduce(ImmutableBytesWritable key, Iterator&lt;NullWritable&gt; values,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        OutputCollector&lt;NullWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        throws IOException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      rowTracker.addRow(key.get());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    @Override<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    public void close() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      rowTracker.validate();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  @Test<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public void testInitTableSnapshotMapperJobConfig() throws Exception {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    setupCluster();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    String snapshotName = "foo";<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    try {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>      TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        NullWritable.class, job, false, tmpTableDir);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      // TODO: would be better to examine directly the cache instance that results from this<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      // config. Currently this is not possible because BlockCache initialization is static.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      Assert.assertEquals(<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        "Snapshot job should be configured for default LruBlockCache.",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        job.getFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, -1), 0.01);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      Assert.assertEquals(<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        "Snapshot job should not use BucketCache.",<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        0, job.getFloat("hbase.bucketcache.size", -1), 0.01);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    } finally {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      UTIL.deleteTable(tableName);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      tearDownCluster();<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>  // TODO: mapred does not support limiting input range by startrow, endrow.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Thus the following tests must override parameterverification.<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  @Test<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public void testWithMockedMapReduceMultiRegion() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    testWithMockedMapReduce(<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        UTIL, "testWithMockedMapReduceMultiRegion", 10, 1, 10, true);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // It does not matter whether true or false is given to setLocalityEnabledTo,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // because it is not read in testWithMockedMapReduce().<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  @Test<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testWithMapReduceMultiRegion() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 1, 10, false);<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>  @Test<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  // run the MR job while HBase is offline<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 10, true);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      String snapshotName, Path tmpTableDir) throws Exception {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      NullWritable.class, job, false, tmpTableDir);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  protected void testWithMockedMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean setLocalityEnabledTo)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      throws Exception {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    setupCluster();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    try {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      createTableAndSnapshot(<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        util, tableName, snapshotName, getStartRow(), getEndRow(), numRegions);<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>      JobConf job = new JobConf(util.getConfiguration());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      // setLocalityEnabledTo is ignored no matter what is specified, so as to test the case that<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      // and the default value is taken.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      Path tmpTableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (numSplitsPerRegion &gt; 1) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.191"></a>
-<span class="sourceLineNo">192</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.192"></a>
-<span class="sourceLineNo">193</span>                NullWritable.class, job, false, tmpTableDir, new RegionSplitter.UniformSplit(),<a name="line.193"></a>
-<span class="sourceLineNo">194</span>                numSplitsPerRegion);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      } else {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>                NullWritable.class, job, false, tmpTableDir);<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>      // mapred doesn't support start and end keys? o.O<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      verifyWithMockedMapReduce(job, numRegions, expectedNumSplits, getStartRow(), getEndRow());<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } finally {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      util.getAdmin().deleteSnapshot(snapshotName);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      util.deleteTable(tableName);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      tearDownCluster();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private void verifyWithMockedMapReduce(JobConf job, int numRegions, int expectedNumSplits,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      byte[] startRow, byte[] stopRow) throws IOException, InterruptedException {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    TableSnapshotInputFormat tsif = new TableSnapshotInputFormat();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    InputSplit[] splits = tsif.getSplits(job, 0);<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    Assert.assertEquals(expectedNumSplits, splits.length);<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      new HBaseTestingUtility.SeenRowTracker(startRow, stopRow);<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // so the default value is taken.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    boolean localityEnabled = SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_DEFAULT;<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    for (int i = 0; i &lt; splits.length; i++) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // validate input split<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      InputSplit split = splits[i];<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      Assert.assertTrue(split instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      if (localityEnabled) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        // When localityEnabled is true, meant to verify split.getLocations()<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        // by the following statement:<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        //   Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length != 0);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        // However, getLocations() of some splits could return an empty array (length is 0),<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        // so drop the verification on length.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        // TODO: investigate how to verify split.getLocations() when localityEnabled is true<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        Assert.assertTrue(split.getLocations() != null);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length == 0);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      // validate record reader<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      OutputCollector collector = mock(OutputCollector.class);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      Reporter reporter = mock(Reporter.class);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      RecordReader&lt;ImmutableBytesWritable, Result&gt; rr = tsif.getRecordReader(split, job, reporter);<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      // validate we can read all the data back<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      ImmutableBytesWritable key = rr.createKey();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      Result value = rr.createValue();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      while (rr.next(key, value)) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        verifyRowFromMap(key, value);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        rowTracker.addRow(key.copyBytes());<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      rr.close();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>    // validate all rows are seen<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    rowTracker.validate();<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>  @Override<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  protected void testWithMapReduceImpl(HBaseTestingUtility util, TableName tableName,<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      String snapshotName, Path tableDir, int numRegions, int numSplitsPerRegion, int expectedNumSplits,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      boolean shutdownCluster) throws Exception {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    doTestWithMapReduce(util, tableName, snapshotName, getStartRow(), getEndRow(), tableDir,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      numRegions, numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  // this is also called by the IntegrationTestTableSnapshotInputFormat<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  public static void doTestWithMapReduce(HBaseTestingUtility util, TableName tableName,<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      String snapshotName, byte[] startRow, byte[] endRow, Path tableDir, int numRegions,<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int numSplitsPerRegion,int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    //create the table and snapshot<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    createTableAndSnapshot(util, tableName, snapshotName, startRow, endRow, numRegions);<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (shutdownCluster) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      util.shutdownMiniHBaseCluster();<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>    try {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // create the job<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      JobConf jobConf = new JobConf(util.getConfiguration());<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>      jobConf.setJarByClass(util.getClass());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJarsForClasses(jobConf,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        TestTableSnapshotInputFormat.class);<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if(numSplitsPerRegion &gt; 1) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>                NullWritable.class, jobConf, true, tableDir, new RegionSplitter.UniformSplit(),<a name="line.292"></a>
-<span class="sourceLineNo">293</span>                numSplitsPerRegion);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      } else {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>                NullWritable.class, jobConf, true, tableDir);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>      jobConf.setReducerClass(TestTableSnapshotInputFormat.TestTableSnapshotReducer.class);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      jobConf.setNumReduceTasks(1);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      jobConf.setOutputFormat(NullOutputFormat.class);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>      RunningJob job = JobClient.runJob(jobConf);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      Assert.assertTrue(job.isSuccessful());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    } finally {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      if (!shutdownCluster) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        util.getAdmin().deleteSnapshot(snapshotName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        util.deleteTable(tableName);<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>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>}<a name="line.313"></a>
+<span class="sourceLineNo">050</span>import org.junit.Ignore;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Rule;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.Test;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.junit.experimental.categories.Category;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.junit.rules.TestName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public class TestTableSnapshotInputFormat extends TableSnapshotInputFormatTestBase {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @ClassRule<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      HBaseClassTestRule.forClass(TestTableSnapshotInputFormat.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final byte[] aaa = Bytes.toBytes("aaa");<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static final byte[] after_zzz = Bytes.toBytes("zz{"); // 'z' + 1 =&gt; '{'<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final String COLUMNS =<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    Bytes.toString(FAMILIES[0]) + " " + Bytes.toString(FAMILIES[1]);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  @Rule<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public TestName name = new TestName();<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  protected byte[] getStartRow() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    return aaa;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected byte[] getEndRow() {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    return after_zzz;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  static class TestTableSnapshotMapper extends MapReduceBase<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      implements TableMap&lt;ImmutableBytesWritable, NullWritable&gt; {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    @Override<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public void map(ImmutableBytesWritable key, Result value,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        OutputCollector&lt;ImmutableBytesWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        throws IOException {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      verifyRowFromMap(key, value);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      collector.collect(key, NullWritable.get());<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public static class TestTableSnapshotReducer extends MapReduceBase<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      implements Reducer&lt;ImmutableBytesWritable, NullWritable, NullWritable, NullWritable&gt; {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      new HBaseTestingUtility.SeenRowTracker(aaa, after_zzz);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public void reduce(ImmutableBytesWritable key, Iterator&lt;NullWritable&gt; values,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        OutputCollector&lt;NullWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        throws IOException {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      rowTracker.addRow(key.get());<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void close() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      rowTracker.validate();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  @Test<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public void testInitTableSnapshotMapperJobConfig() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    setupCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    String snapshotName = "foo";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    try {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>      TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        NullWritable.class, job, false, tmpTableDir);<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>      // TODO: would be better to examine directly the cache instance that results from this<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      // config. Currently this is not possible because BlockCache initialization is static.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      Assert.assertEquals(<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        "Snapshot job should be configured for default LruBlockCache.",<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        job.getFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, -1), 0.01);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      Assert.assertEquals(<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        "Snapshot job should not use BucketCache.",<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        0, job.getFloat("hbase.bucketcache.size", -1), 0.01);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    } finally {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      UTIL.deleteTable(tableName);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      tearDownCluster();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // TODO: mapred does not support limiting input range by startrow, endrow.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Thus the following tests must override parameterverification.<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Test<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void testWithMockedMapReduceMultiRegion() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    testWithMockedMapReduce(<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        UTIL, "testWithMockedMapReduceMultiRegion", 10, 1, 10, true);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        // It does not matter whether true or false is given to setLocalityEnabledTo,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        // because it is not read in testWithMockedMapReduce().<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void testWithMapReduceMultiRegion() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 1, 10, false);<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>  @Test<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Override<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  // run the MR job while HBase is offline<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 10, true);<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>  @Override<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      String snapshotName, Path tmpTableDir) throws Exception {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      NullWritable.class, job, false, tmpTableDir);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  @Override<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  protected void testWithMockedMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean setLocalityEnabledTo)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      throws Exception {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    setupCluster();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    try {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      createTableAndSnapshot(<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        util, tableName, snapshotName, getStartRow(), getEndRow(), numRegions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>      JobConf job = new JobConf(util.getConfiguration());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      // setLocalityEnabledTo is ignored no matter what is specified, so as to test the case that<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      // and the default value is taken.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      Path tmpTableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (numSplitsPerRegion &gt; 1) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.193"></a>
+<span class="sourceLineNo">194</span>                NullWritable.class, job, false, tmpTableDir, new RegionSplitter.UniformSplit(),<a name="line.194"></a>
+<span class="sourceLineNo">195</span>                numSplitsPerRegion);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.198"></a>
+<span class="sourceLineNo">199</span>                NullWritable.class, job, false, tmpTableDir);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // mapred doesn't support start and end keys? o.O<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      verifyWithMockedMapReduce(job, numRegions, expectedNumSplits, getStartRow(), getEndRow());<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>    } finally {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      util.getAdmin().deleteSnapshot(snapshotName);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      util.deleteTable(tableName);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      tearDownCluster();<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><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private void verifyWithMockedMapReduce(JobConf job, int numRegions, int expectedNumSplits,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      byte[] startRow, byte[] stopRow) throws IOException, InterruptedException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    TableSnapshotInputFormat tsif = new TableSnapshotInputFormat();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    InputSplit[] splits = tsif.getSplits(job, 0);<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Assert.assertEquals(expectedNumSplits, splits.length);<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      new HBaseTestingUtility.SeenRowTracker(startRow, stopRow);<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // so the default value is taken.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    boolean localityEnabled = SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_DEFAULT;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; splits.length; i++) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      // validate input split<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      InputSplit split = splits[i];<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      Assert.assertTrue(split instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (localityEnabled) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        // When localityEnabled is true, meant to verify split.getLocations()<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // by the following statement:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        //   Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length != 0);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        // However, getLocations() of some splits could return an empty array (length is 0),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        // so drop the verification on length.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        // TODO: investigate how to verify split.getLocations() when localityEnabled is true<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        Assert.assertTrue(split.getLocations() != null);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      } else {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length == 0);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // validate record reader<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      OutputCollector collector = mock(OutputCollector.class);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      Reporter reporter = mock(Reporter.class);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      RecordReader&lt;ImmutableBytesWritable, Result&gt; rr = tsif.getRecordReader(split, job, reporter);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // validate we can read all the data back<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      ImmutableBytesWritable key = rr.createKey();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      Result value = rr.createValue();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      while (rr.next(key, value)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        verifyRowFromMap(key, value);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        rowTracker.addRow(key.copyBytes());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>      rr.close();<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>    // validate all rows are seen<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rowTracker.validate();<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>  @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  protected void testWithMapReduceImpl(HBaseTestingUtility util, TableName tableName,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      String snapshotName, Path tableDir, int numRegions, int numSplitsPerRegion, int expectedNumSplits,<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      boolean shutdownCluster) throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    doTestWithMapReduce(util, tableName, snapshotName, getStartRow(), getEndRow(), tableDir,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      numRegions, numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  // this is also called by the IntegrationTestTableSnapshotInputFormat<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public static void doTestWithMapReduce(HBaseTestingUtility util, TableName tableName,<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      String snapshotName, byte[] startRow, byte[] endRow, Path tableDir, int numRegions,<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int numSplitsPerRegion,int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    //create the table and snapshot<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    createTableAndSnapshot(util, tableName, snapshotName, startRow, endRow, numRegions);<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>    if (shutdownCluster) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      util.shutdownMiniHBaseCluster();<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>    try {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      // create the job<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      JobConf jobConf = new JobConf(util.getConfiguration());<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      jobConf.setJarByClass(util.getClass());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJarsForClasses(jobConf,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        TestTableSnapshotInputFormat.class);<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>      if(numSplitsPerRegion &gt; 1) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>                NullWritable.class, jobConf, true, tableDir, new RegionSplitter.UniformSplit(),<a name="line.293"></a>
+<span class="sourceLineNo">294</span>                numSplitsPerRegion);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      } else {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.297"></a>
+<span class="sourceLineNo">298</span>                NullWritable.class, jobConf, true, tableDir);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      jobConf.setReducerClass(TestTableSnapshotInputFormat.TestTableSnapshotReducer.class);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      jobConf.setNumReduceTasks(1);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      jobConf.setOutputFormat(NullOutputFormat.class);<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      RunningJob job = JobClient.runJob(jobConf);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      Assert.assertTrue(job.isSuccessful());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    } finally {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (!shutdownCluster) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        util.getAdmin().deleteSnapshot(snapshotName);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        util.deleteTable(tableName);<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><a name="line.314"></a>
+<span class="sourceLineNo">315</span>  @Ignore // Ignored in mapred package because it keeps failing but allowed in mapreduce package.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  @Test<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>}<a name="line.320"></a>
 
 
 
index 588a82d..0b6a065 100644 (file)
 <span class="sourceLineNo">047</span>import org.apache.hadoop.mapred.lib.NullOutputFormat;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.junit.Assert;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import org.junit.ClassRule;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Rule;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.rules.TestName;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public class TestTableSnapshotInputFormat extends TableSnapshotInputFormatTestBase {<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @ClassRule<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      HBaseClassTestRule.forClass(TestTableSnapshotInputFormat.class);<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final byte[] aaa = Bytes.toBytes("aaa");<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private static final byte[] after_zzz = Bytes.toBytes("zz{"); // 'z' + 1 =&gt; '{'<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final String COLUMNS =<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    Bytes.toString(FAMILIES[0]) + " " + Bytes.toString(FAMILIES[1]);<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  @Rule<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public TestName name = new TestName();<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  protected byte[] getStartRow() {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return aaa;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  @Override<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  protected byte[] getEndRow() {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    return after_zzz;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  static class TestTableSnapshotMapper extends MapReduceBase<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      implements TableMap&lt;ImmutableBytesWritable, NullWritable&gt; {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    @Override<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    public void map(ImmutableBytesWritable key, Result value,<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        OutputCollector&lt;ImmutableBytesWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        throws IOException {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      verifyRowFromMap(key, value);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      collector.collect(key, NullWritable.get());<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><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public static class TestTableSnapshotReducer extends MapReduceBase<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      implements Reducer&lt;ImmutableBytesWritable, NullWritable, NullWritable, NullWritable&gt; {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      new HBaseTestingUtility.SeenRowTracker(aaa, after_zzz);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void reduce(ImmutableBytesWritable key, Iterator&lt;NullWritable&gt; values,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        OutputCollector&lt;NullWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        throws IOException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      rowTracker.addRow(key.get());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    @Override<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    public void close() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      rowTracker.validate();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  @Test<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public void testInitTableSnapshotMapperJobConfig() throws Exception {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    setupCluster();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    String snapshotName = "foo";<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    try {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>      TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        NullWritable.class, job, false, tmpTableDir);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      // TODO: would be better to examine directly the cache instance that results from this<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      // config. Currently this is not possible because BlockCache initialization is static.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      Assert.assertEquals(<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        "Snapshot job should be configured for default LruBlockCache.",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        job.getFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, -1), 0.01);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      Assert.assertEquals(<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        "Snapshot job should not use BucketCache.",<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        0, job.getFloat("hbase.bucketcache.size", -1), 0.01);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    } finally {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      UTIL.deleteTable(tableName);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      tearDownCluster();<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>  // TODO: mapred does not support limiting input range by startrow, endrow.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Thus the following tests must override parameterverification.<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  @Test<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public void testWithMockedMapReduceMultiRegion() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    testWithMockedMapReduce(<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        UTIL, "testWithMockedMapReduceMultiRegion", 10, 1, 10, true);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // It does not matter whether true or false is given to setLocalityEnabledTo,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // because it is not read in testWithMockedMapReduce().<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  @Test<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testWithMapReduceMultiRegion() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 1, 10, false);<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>  @Test<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  // run the MR job while HBase is offline<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 10, true);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      String snapshotName, Path tmpTableDir) throws Exception {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      NullWritable.class, job, false, tmpTableDir);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  protected void testWithMockedMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean setLocalityEnabledTo)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      throws Exception {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    setupCluster();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    try {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      createTableAndSnapshot(<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        util, tableName, snapshotName, getStartRow(), getEndRow(), numRegions);<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>      JobConf job = new JobConf(util.getConfiguration());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      // setLocalityEnabledTo is ignored no matter what is specified, so as to test the case that<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      // and the default value is taken.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      Path tmpTableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (numSplitsPerRegion &gt; 1) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.191"></a>
-<span class="sourceLineNo">192</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.192"></a>
-<span class="sourceLineNo">193</span>                NullWritable.class, job, false, tmpTableDir, new RegionSplitter.UniformSplit(),<a name="line.193"></a>
-<span class="sourceLineNo">194</span>                numSplitsPerRegion);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      } else {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>                NullWritable.class, job, false, tmpTableDir);<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>      // mapred doesn't support start and end keys? o.O<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      verifyWithMockedMapReduce(job, numRegions, expectedNumSplits, getStartRow(), getEndRow());<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } finally {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      util.getAdmin().deleteSnapshot(snapshotName);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      util.deleteTable(tableName);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      tearDownCluster();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private void verifyWithMockedMapReduce(JobConf job, int numRegions, int expectedNumSplits,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      byte[] startRow, byte[] stopRow) throws IOException, InterruptedException {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    TableSnapshotInputFormat tsif = new TableSnapshotInputFormat();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    InputSplit[] splits = tsif.getSplits(job, 0);<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    Assert.assertEquals(expectedNumSplits, splits.length);<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      new HBaseTestingUtility.SeenRowTracker(startRow, stopRow);<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // so the default value is taken.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    boolean localityEnabled = SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_DEFAULT;<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    for (int i = 0; i &lt; splits.length; i++) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // validate input split<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      InputSplit split = splits[i];<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      Assert.assertTrue(split instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      if (localityEnabled) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        // When localityEnabled is true, meant to verify split.getLocations()<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        // by the following statement:<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        //   Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length != 0);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        // However, getLocations() of some splits could return an empty array (length is 0),<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        // so drop the verification on length.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        // TODO: investigate how to verify split.getLocations() when localityEnabled is true<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        Assert.assertTrue(split.getLocations() != null);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length == 0);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      // validate record reader<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      OutputCollector collector = mock(OutputCollector.class);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      Reporter reporter = mock(Reporter.class);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      RecordReader&lt;ImmutableBytesWritable, Result&gt; rr = tsif.getRecordReader(split, job, reporter);<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      // validate we can read all the data back<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      ImmutableBytesWritable key = rr.createKey();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      Result value = rr.createValue();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      while (rr.next(key, value)) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        verifyRowFromMap(key, value);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        rowTracker.addRow(key.copyBytes());<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      rr.close();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>    // validate all rows are seen<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    rowTracker.validate();<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>  @Override<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  protected void testWithMapReduceImpl(HBaseTestingUtility util, TableName tableName,<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      String snapshotName, Path tableDir, int numRegions, int numSplitsPerRegion, int expectedNumSplits,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      boolean shutdownCluster) throws Exception {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    doTestWithMapReduce(util, tableName, snapshotName, getStartRow(), getEndRow(), tableDir,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      numRegions, numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  // this is also called by the IntegrationTestTableSnapshotInputFormat<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  public static void doTestWithMapReduce(HBaseTestingUtility util, TableName tableName,<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      String snapshotName, byte[] startRow, byte[] endRow, Path tableDir, int numRegions,<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int numSplitsPerRegion,int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    //create the table and snapshot<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    createTableAndSnapshot(util, tableName, snapshotName, startRow, endRow, numRegions);<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (shutdownCluster) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      util.shutdownMiniHBaseCluster();<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>    try {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // create the job<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      JobConf jobConf = new JobConf(util.getConfiguration());<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>      jobConf.setJarByClass(util.getClass());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJarsForClasses(jobConf,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        TestTableSnapshotInputFormat.class);<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if(numSplitsPerRegion &gt; 1) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>                NullWritable.class, jobConf, true, tableDir, new RegionSplitter.UniformSplit(),<a name="line.292"></a>
-<span class="sourceLineNo">293</span>                numSplitsPerRegion);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      } else {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>                NullWritable.class, jobConf, true, tableDir);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>      jobConf.setReducerClass(TestTableSnapshotInputFormat.TestTableSnapshotReducer.class);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      jobConf.setNumReduceTasks(1);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      jobConf.setOutputFormat(NullOutputFormat.class);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>      RunningJob job = JobClient.runJob(jobConf);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      Assert.assertTrue(job.isSuccessful());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    } finally {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      if (!shutdownCluster) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        util.getAdmin().deleteSnapshot(snapshotName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        util.deleteTable(tableName);<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>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>}<a name="line.313"></a>
+<span class="sourceLineNo">050</span>import org.junit.Ignore;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Rule;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.Test;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.junit.experimental.categories.Category;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.junit.rules.TestName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public class TestTableSnapshotInputFormat extends TableSnapshotInputFormatTestBase {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @ClassRule<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      HBaseClassTestRule.forClass(TestTableSnapshotInputFormat.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final byte[] aaa = Bytes.toBytes("aaa");<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static final byte[] after_zzz = Bytes.toBytes("zz{"); // 'z' + 1 =&gt; '{'<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final String COLUMNS =<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    Bytes.toString(FAMILIES[0]) + " " + Bytes.toString(FAMILIES[1]);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  @Rule<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public TestName name = new TestName();<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  protected byte[] getStartRow() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    return aaa;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected byte[] getEndRow() {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    return after_zzz;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  static class TestTableSnapshotMapper extends MapReduceBase<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      implements TableMap&lt;ImmutableBytesWritable, NullWritable&gt; {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    @Override<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public void map(ImmutableBytesWritable key, Result value,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        OutputCollector&lt;ImmutableBytesWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        throws IOException {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      verifyRowFromMap(key, value);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      collector.collect(key, NullWritable.get());<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public static class TestTableSnapshotReducer extends MapReduceBase<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      implements Reducer&lt;ImmutableBytesWritable, NullWritable, NullWritable, NullWritable&gt; {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      new HBaseTestingUtility.SeenRowTracker(aaa, after_zzz);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public void reduce(ImmutableBytesWritable key, Iterator&lt;NullWritable&gt; values,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        OutputCollector&lt;NullWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        throws IOException {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      rowTracker.addRow(key.get());<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void close() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      rowTracker.validate();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  @Test<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public void testInitTableSnapshotMapperJobConfig() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    setupCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    String snapshotName = "foo";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    try {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>      TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        NullWritable.class, job, false, tmpTableDir);<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>      // TODO: would be better to examine directly the cache instance that results from this<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      // config. Currently this is not possible because BlockCache initialization is static.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      Assert.assertEquals(<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        "Snapshot job should be configured for default LruBlockCache.",<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        job.getFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, -1), 0.01);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      Assert.assertEquals(<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        "Snapshot job should not use BucketCache.",<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        0, job.getFloat("hbase.bucketcache.size", -1), 0.01);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    } finally {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      UTIL.deleteTable(tableName);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      tearDownCluster();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // TODO: mapred does not support limiting input range by startrow, endrow.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Thus the following tests must override parameterverification.<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Test<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void testWithMockedMapReduceMultiRegion() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    testWithMockedMapReduce(<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        UTIL, "testWithMockedMapReduceMultiRegion", 10, 1, 10, true);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        // It does not matter whether true or false is given to setLocalityEnabledTo,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        // because it is not read in testWithMockedMapReduce().<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void testWithMapReduceMultiRegion() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 1, 10, false);<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>  @Test<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Override<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  // run the MR job while HBase is offline<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 10, true);<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>  @Override<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      String snapshotName, Path tmpTableDir) throws Exception {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      NullWritable.class, job, false, tmpTableDir);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  @Override<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  protected void testWithMockedMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean setLocalityEnabledTo)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      throws Exception {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    setupCluster();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    try {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      createTableAndSnapshot(<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        util, tableName, snapshotName, getStartRow(), getEndRow(), numRegions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>      JobConf job = new JobConf(util.getConfiguration());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      // setLocalityEnabledTo is ignored no matter what is specified, so as to test the case that<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      // and the default value is taken.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      Path tmpTableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (numSplitsPerRegion &gt; 1) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.193"></a>
+<span class="sourceLineNo">194</span>                NullWritable.class, job, false, tmpTableDir, new RegionSplitter.UniformSplit(),<a name="line.194"></a>
+<span class="sourceLineNo">195</span>                numSplitsPerRegion);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.198"></a>
+<span class="sourceLineNo">199</span>                NullWritable.class, job, false, tmpTableDir);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // mapred doesn't support start and end keys? o.O<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      verifyWithMockedMapReduce(job, numRegions, expectedNumSplits, getStartRow(), getEndRow());<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>    } finally {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      util.getAdmin().deleteSnapshot(snapshotName);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      util.deleteTable(tableName);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      tearDownCluster();<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><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private void verifyWithMockedMapReduce(JobConf job, int numRegions, int expectedNumSplits,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      byte[] startRow, byte[] stopRow) throws IOException, InterruptedException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    TableSnapshotInputFormat tsif = new TableSnapshotInputFormat();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    InputSplit[] splits = tsif.getSplits(job, 0);<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Assert.assertEquals(expectedNumSplits, splits.length);<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      new HBaseTestingUtility.SeenRowTracker(startRow, stopRow);<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // so the default value is taken.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    boolean localityEnabled = SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_DEFAULT;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; splits.length; i++) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      // validate input split<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      InputSplit split = splits[i];<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      Assert.assertTrue(split instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (localityEnabled) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        // When localityEnabled is true, meant to verify split.getLocations()<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // by the following statement:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        //   Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length != 0);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        // However, getLocations() of some splits could return an empty array (length is 0),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        // so drop the verification on length.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        // TODO: investigate how to verify split.getLocations() when localityEnabled is true<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        Assert.assertTrue(split.getLocations() != null);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      } else {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length == 0);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // validate record reader<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      OutputCollector collector = mock(OutputCollector.class);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      Reporter reporter = mock(Reporter.class);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      RecordReader&lt;ImmutableBytesWritable, Result&gt; rr = tsif.getRecordReader(split, job, reporter);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // validate we can read all the data back<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      ImmutableBytesWritable key = rr.createKey();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      Result value = rr.createValue();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      while (rr.next(key, value)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        verifyRowFromMap(key, value);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        rowTracker.addRow(key.copyBytes());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>      rr.close();<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>    // validate all rows are seen<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rowTracker.validate();<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>  @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  protected void testWithMapReduceImpl(HBaseTestingUtility util, TableName tableName,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      String snapshotName, Path tableDir, int numRegions, int numSplitsPerRegion, int expectedNumSplits,<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      boolean shutdownCluster) throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    doTestWithMapReduce(util, tableName, snapshotName, getStartRow(), getEndRow(), tableDir,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      numRegions, numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  // this is also called by the IntegrationTestTableSnapshotInputFormat<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public static void doTestWithMapReduce(HBaseTestingUtility util, TableName tableName,<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      String snapshotName, byte[] startRow, byte[] endRow, Path tableDir, int numRegions,<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int numSplitsPerRegion,int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    //create the table and snapshot<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    createTableAndSnapshot(util, tableName, snapshotName, startRow, endRow, numRegions);<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>    if (shutdownCluster) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      util.shutdownMiniHBaseCluster();<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>    try {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      // create the job<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      JobConf jobConf = new JobConf(util.getConfiguration());<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      jobConf.setJarByClass(util.getClass());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJarsForClasses(jobConf,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        TestTableSnapshotInputFormat.class);<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>      if(numSplitsPerRegion &gt; 1) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>                NullWritable.class, jobConf, true, tableDir, new RegionSplitter.UniformSplit(),<a name="line.293"></a>
+<span class="sourceLineNo">294</span>                numSplitsPerRegion);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      } else {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.297"></a>
+<span class="sourceLineNo">298</span>                NullWritable.class, jobConf, true, tableDir);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      jobConf.setReducerClass(TestTableSnapshotInputFormat.TestTableSnapshotReducer.class);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      jobConf.setNumReduceTasks(1);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      jobConf.setOutputFormat(NullOutputFormat.class);<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      RunningJob job = JobClient.runJob(jobConf);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      Assert.assertTrue(job.isSuccessful());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    } finally {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (!shutdownCluster) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        util.getAdmin().deleteSnapshot(snapshotName);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        util.deleteTable(tableName);<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><a name="line.314"></a>
+<span class="sourceLineNo">315</span>  @Ignore // Ignored in mapred package because it keeps failing but allowed in mapreduce package.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  @Test<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>}<a name="line.320"></a>
 
 
 
index 588a82d..0b6a065 100644 (file)
 <span class="sourceLineNo">047</span>import org.apache.hadoop.mapred.lib.NullOutputFormat;<a name="line.47"></a>
 <span class="sourceLineNo">048</span>import org.junit.Assert;<a name="line.48"></a>
 <span class="sourceLineNo">049</span>import org.junit.ClassRule;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Rule;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.junit.rules.TestName;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.55"></a>
-<span class="sourceLineNo">056</span>public class TestTableSnapshotInputFormat extends TableSnapshotInputFormatTestBase {<a name="line.56"></a>
-<span class="sourceLineNo">057</span><a name="line.57"></a>
-<span class="sourceLineNo">058</span>  @ClassRule<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      HBaseClassTestRule.forClass(TestTableSnapshotInputFormat.class);<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final byte[] aaa = Bytes.toBytes("aaa");<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private static final byte[] after_zzz = Bytes.toBytes("zz{"); // 'z' + 1 =&gt; '{'<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private static final String COLUMNS =<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    Bytes.toString(FAMILIES[0]) + " " + Bytes.toString(FAMILIES[1]);<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  @Rule<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  public TestName name = new TestName();<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  protected byte[] getStartRow() {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return aaa;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  @Override<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  protected byte[] getEndRow() {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    return after_zzz;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>  static class TestTableSnapshotMapper extends MapReduceBase<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      implements TableMap&lt;ImmutableBytesWritable, NullWritable&gt; {<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    @Override<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    public void map(ImmutableBytesWritable key, Result value,<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        OutputCollector&lt;ImmutableBytesWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        throws IOException {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      verifyRowFromMap(key, value);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      collector.collect(key, NullWritable.get());<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><a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public static class TestTableSnapshotReducer extends MapReduceBase<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      implements Reducer&lt;ImmutableBytesWritable, NullWritable, NullWritable, NullWritable&gt; {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      new HBaseTestingUtility.SeenRowTracker(aaa, after_zzz);<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void reduce(ImmutableBytesWritable key, Iterator&lt;NullWritable&gt; values,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>        OutputCollector&lt;NullWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        throws IOException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>      rowTracker.addRow(key.get());<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    }<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>    @Override<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    public void close() {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>      rowTracker.validate();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  @Test<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public void testInitTableSnapshotMapperJobConfig() throws Exception {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    setupCluster();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    String snapshotName = "foo";<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>    try {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>      TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>        COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        NullWritable.class, job, false, tmpTableDir);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>      // TODO: would be better to examine directly the cache instance that results from this<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      // config. Currently this is not possible because BlockCache initialization is static.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      Assert.assertEquals(<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        "Snapshot job should be configured for default LruBlockCache.",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT,<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        job.getFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, -1), 0.01);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      Assert.assertEquals(<a name="line.130"></a>
-<span class="sourceLineNo">131</span>        "Snapshot job should not use BucketCache.",<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        0, job.getFloat("hbase.bucketcache.size", -1), 0.01);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    } finally {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      UTIL.deleteTable(tableName);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      tearDownCluster();<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>  // TODO: mapred does not support limiting input range by startrow, endrow.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  // Thus the following tests must override parameterverification.<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  @Test<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  @Override<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public void testWithMockedMapReduceMultiRegion() throws Exception {<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    testWithMockedMapReduce(<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        UTIL, "testWithMockedMapReduceMultiRegion", 10, 1, 10, true);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // It does not matter whether true or false is given to setLocalityEnabledTo,<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // because it is not read in testWithMockedMapReduce().<a name="line.149"></a>
-<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>  @Test<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testWithMapReduceMultiRegion() throws Exception {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 1, 10, false);<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>  @Test<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  @Override<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  // run the MR job while HBase is offline<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 10, true);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  }<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      String snapshotName, Path tmpTableDir) throws Exception {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      NullWritable.class, job, false, tmpTableDir);<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
-<span class="sourceLineNo">173</span><a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  protected void testWithMockedMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean setLocalityEnabledTo)<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      throws Exception {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    setupCluster();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    try {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      createTableAndSnapshot(<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        util, tableName, snapshotName, getStartRow(), getEndRow(), numRegions);<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>      JobConf job = new JobConf(util.getConfiguration());<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      // setLocalityEnabledTo is ignored no matter what is specified, so as to test the case that<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      // and the default value is taken.<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      Path tmpTableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>      if (numSplitsPerRegion &gt; 1) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.191"></a>
-<span class="sourceLineNo">192</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.192"></a>
-<span class="sourceLineNo">193</span>                NullWritable.class, job, false, tmpTableDir, new RegionSplitter.UniformSplit(),<a name="line.193"></a>
-<span class="sourceLineNo">194</span>                numSplitsPerRegion);<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      } else {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.196"></a>
-<span class="sourceLineNo">197</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>                NullWritable.class, job, false, tmpTableDir);<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>      // mapred doesn't support start and end keys? o.O<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      verifyWithMockedMapReduce(job, numRegions, expectedNumSplits, getStartRow(), getEndRow());<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>    } finally {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      util.getAdmin().deleteSnapshot(snapshotName);<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      util.deleteTable(tableName);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      tearDownCluster();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  private void verifyWithMockedMapReduce(JobConf job, int numRegions, int expectedNumSplits,<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      byte[] startRow, byte[] stopRow) throws IOException, InterruptedException {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    TableSnapshotInputFormat tsif = new TableSnapshotInputFormat();<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    InputSplit[] splits = tsif.getSplits(job, 0);<a name="line.214"></a>
-<span class="sourceLineNo">215</span><a name="line.215"></a>
-<span class="sourceLineNo">216</span>    Assert.assertEquals(expectedNumSplits, splits.length);<a name="line.216"></a>
-<span class="sourceLineNo">217</span><a name="line.217"></a>
-<span class="sourceLineNo">218</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      new HBaseTestingUtility.SeenRowTracker(startRow, stopRow);<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>    // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified,<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // so the default value is taken.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    boolean localityEnabled = SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_DEFAULT;<a name="line.223"></a>
-<span class="sourceLineNo">224</span><a name="line.224"></a>
-<span class="sourceLineNo">225</span>    for (int i = 0; i &lt; splits.length; i++) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      // validate input split<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      InputSplit split = splits[i];<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      Assert.assertTrue(split instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      if (localityEnabled) {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        // When localityEnabled is true, meant to verify split.getLocations()<a name="line.230"></a>
-<span class="sourceLineNo">231</span>        // by the following statement:<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        //   Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length != 0);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>        // However, getLocations() of some splits could return an empty array (length is 0),<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        // so drop the verification on length.<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        // TODO: investigate how to verify split.getLocations() when localityEnabled is true<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        Assert.assertTrue(split.getLocations() != null);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      } else {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length == 0);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>      // validate record reader<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      OutputCollector collector = mock(OutputCollector.class);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      Reporter reporter = mock(Reporter.class);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      RecordReader&lt;ImmutableBytesWritable, Result&gt; rr = tsif.getRecordReader(split, job, reporter);<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>      // validate we can read all the data back<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      ImmutableBytesWritable key = rr.createKey();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      Result value = rr.createValue();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      while (rr.next(key, value)) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        verifyRowFromMap(key, value);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        rowTracker.addRow(key.copyBytes());<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      }<a name="line.252"></a>
-<span class="sourceLineNo">253</span><a name="line.253"></a>
-<span class="sourceLineNo">254</span>      rr.close();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>    // validate all rows are seen<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    rowTracker.validate();<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>  @Override<a name="line.261"></a>
-<span class="sourceLineNo">262</span>  protected void testWithMapReduceImpl(HBaseTestingUtility util, TableName tableName,<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      String snapshotName, Path tableDir, int numRegions, int numSplitsPerRegion, int expectedNumSplits,<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      boolean shutdownCluster) throws Exception {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    doTestWithMapReduce(util, tableName, snapshotName, getStartRow(), getEndRow(), tableDir,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      numRegions, numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  // this is also called by the IntegrationTestTableSnapshotInputFormat<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  public static void doTestWithMapReduce(HBaseTestingUtility util, TableName tableName,<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      String snapshotName, byte[] startRow, byte[] endRow, Path tableDir, int numRegions,<a name="line.271"></a>
-<span class="sourceLineNo">272</span>      int numSplitsPerRegion,int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>    //create the table and snapshot<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    createTableAndSnapshot(util, tableName, snapshotName, startRow, endRow, numRegions);<a name="line.275"></a>
-<span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>    if (shutdownCluster) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>      util.shutdownMiniHBaseCluster();<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>    try {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // create the job<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      JobConf jobConf = new JobConf(util.getConfiguration());<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>      jobConf.setJarByClass(util.getClass());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJarsForClasses(jobConf,<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        TestTableSnapshotInputFormat.class);<a name="line.287"></a>
-<span class="sourceLineNo">288</span><a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if(numSplitsPerRegion &gt; 1) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.290"></a>
-<span class="sourceLineNo">291</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.291"></a>
-<span class="sourceLineNo">292</span>                NullWritable.class, jobConf, true, tableDir, new RegionSplitter.UniformSplit(),<a name="line.292"></a>
-<span class="sourceLineNo">293</span>                numSplitsPerRegion);<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      } else {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.295"></a>
-<span class="sourceLineNo">296</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>                NullWritable.class, jobConf, true, tableDir);<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>      jobConf.setReducerClass(TestTableSnapshotInputFormat.TestTableSnapshotReducer.class);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      jobConf.setNumReduceTasks(1);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      jobConf.setOutputFormat(NullOutputFormat.class);<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>      RunningJob job = JobClient.runJob(jobConf);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      Assert.assertTrue(job.isSuccessful());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    } finally {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      if (!shutdownCluster) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>        util.getAdmin().deleteSnapshot(snapshotName);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        util.deleteTable(tableName);<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>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>}<a name="line.313"></a>
+<span class="sourceLineNo">050</span>import org.junit.Ignore;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Rule;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.Test;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.junit.experimental.categories.Category;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.junit.rules.TestName;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>@Category({VerySlowMapReduceTests.class, LargeTests.class})<a name="line.56"></a>
+<span class="sourceLineNo">057</span>public class TestTableSnapshotInputFormat extends TableSnapshotInputFormatTestBase {<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @ClassRule<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      HBaseClassTestRule.forClass(TestTableSnapshotInputFormat.class);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final byte[] aaa = Bytes.toBytes("aaa");<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private static final byte[] after_zzz = Bytes.toBytes("zz{"); // 'z' + 1 =&gt; '{'<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private static final String COLUMNS =<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    Bytes.toString(FAMILIES[0]) + " " + Bytes.toString(FAMILIES[1]);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>  @Rule<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public TestName name = new TestName();<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  @Override<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  protected byte[] getStartRow() {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    return aaa;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  }<a name="line.74"></a>
+<span class="sourceLineNo">075</span><a name="line.75"></a>
+<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  protected byte[] getEndRow() {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    return after_zzz;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  }<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  static class TestTableSnapshotMapper extends MapReduceBase<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      implements TableMap&lt;ImmutableBytesWritable, NullWritable&gt; {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    @Override<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    public void map(ImmutableBytesWritable key, Result value,<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        OutputCollector&lt;ImmutableBytesWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        throws IOException {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      verifyRowFromMap(key, value);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      collector.collect(key, NullWritable.get());<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
+<span class="sourceLineNo">091</span><a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public static class TestTableSnapshotReducer extends MapReduceBase<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      implements Reducer&lt;ImmutableBytesWritable, NullWritable, NullWritable, NullWritable&gt; {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      new HBaseTestingUtility.SeenRowTracker(aaa, after_zzz);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public void reduce(ImmutableBytesWritable key, Iterator&lt;NullWritable&gt; values,<a name="line.98"></a>
+<span class="sourceLineNo">099</span>        OutputCollector&lt;NullWritable, NullWritable&gt; collector, Reporter reporter)<a name="line.99"></a>
+<span class="sourceLineNo">100</span>        throws IOException {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      rowTracker.addRow(key.get());<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void close() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      rowTracker.validate();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  @Test<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public void testInitTableSnapshotMapperJobConfig() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    setupCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    String snapshotName = "foo";<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    try {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.119"></a>
+<span class="sourceLineNo">120</span><a name="line.120"></a>
+<span class="sourceLineNo">121</span>      TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.122"></a>
+<span class="sourceLineNo">123</span>        NullWritable.class, job, false, tmpTableDir);<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>      // TODO: would be better to examine directly the cache instance that results from this<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      // config. Currently this is not possible because BlockCache initialization is static.<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      Assert.assertEquals(<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        "Snapshot job should be configured for default LruBlockCache.",<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        job.getFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, -1), 0.01);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      Assert.assertEquals(<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        "Snapshot job should not use BucketCache.",<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        0, job.getFloat("hbase.bucketcache.size", -1), 0.01);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    } finally {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      UTIL.deleteTable(tableName);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      tearDownCluster();<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  }<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // TODO: mapred does not support limiting input range by startrow, endrow.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  // Thus the following tests must override parameterverification.<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  @Test<a name="line.144"></a>
+<span class="sourceLineNo">145</span>  @Override<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public void testWithMockedMapReduceMultiRegion() throws Exception {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    testWithMockedMapReduce(<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        UTIL, "testWithMockedMapReduceMultiRegion", 10, 1, 10, true);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>        // It does not matter whether true or false is given to setLocalityEnabledTo,<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        // because it is not read in testWithMockedMapReduce().<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  @Override<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public void testWithMapReduceMultiRegion() throws Exception {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 1, 10, false);<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>  @Test<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  @Override<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  // run the MR job while HBase is offline<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 10, true);<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>  @Override<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      String snapshotName, Path tmpTableDir) throws Exception {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    JobConf job = new JobConf(UTIL.getConfiguration());<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      NullWritable.class, job, false, tmpTableDir);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>  @Override<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  protected void testWithMockedMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean setLocalityEnabledTo)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      throws Exception {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    setupCluster();<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    final TableName tableName = TableName.valueOf(name.getMethodName());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    try {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      createTableAndSnapshot(<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        util, tableName, snapshotName, getStartRow(), getEndRow(), numRegions);<a name="line.183"></a>
+<span class="sourceLineNo">184</span><a name="line.184"></a>
+<span class="sourceLineNo">185</span>      JobConf job = new JobConf(util.getConfiguration());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      // setLocalityEnabledTo is ignored no matter what is specified, so as to test the case that<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      // and the default value is taken.<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      Path tmpTableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>      if (numSplitsPerRegion &gt; 1) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.193"></a>
+<span class="sourceLineNo">194</span>                NullWritable.class, job, false, tmpTableDir, new RegionSplitter.UniformSplit(),<a name="line.194"></a>
+<span class="sourceLineNo">195</span>                numSplitsPerRegion);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      } else {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName,<a name="line.197"></a>
+<span class="sourceLineNo">198</span>                COLUMNS, TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.198"></a>
+<span class="sourceLineNo">199</span>                NullWritable.class, job, false, tmpTableDir);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      // mapred doesn't support start and end keys? o.O<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      verifyWithMockedMapReduce(job, numRegions, expectedNumSplits, getStartRow(), getEndRow());<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>    } finally {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      util.getAdmin().deleteSnapshot(snapshotName);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      util.deleteTable(tableName);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      tearDownCluster();<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><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private void verifyWithMockedMapReduce(JobConf job, int numRegions, int expectedNumSplits,<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      byte[] startRow, byte[] stopRow) throws IOException, InterruptedException {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    TableSnapshotInputFormat tsif = new TableSnapshotInputFormat();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    InputSplit[] splits = tsif.getSplits(job, 0);<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    Assert.assertEquals(expectedNumSplits, splits.length);<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>    HBaseTestingUtility.SeenRowTracker rowTracker =<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      new HBaseTestingUtility.SeenRowTracker(startRow, stopRow);<a name="line.220"></a>
+<span class="sourceLineNo">221</span><a name="line.221"></a>
+<span class="sourceLineNo">222</span>    // SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_KEY is not explicitly specified,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    // so the default value is taken.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    boolean localityEnabled = SNAPSHOT_INPUTFORMAT_LOCALITY_ENABLED_DEFAULT;<a name="line.224"></a>
+<span class="sourceLineNo">225</span><a name="line.225"></a>
+<span class="sourceLineNo">226</span>    for (int i = 0; i &lt; splits.length; i++) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      // validate input split<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      InputSplit split = splits[i];<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      Assert.assertTrue(split instanceof TableSnapshotInputFormat.TableSnapshotRegionSplit);<a name="line.229"></a>
+<span class="sourceLineNo">230</span>      if (localityEnabled) {<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        // When localityEnabled is true, meant to verify split.getLocations()<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        // by the following statement:<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        //   Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length != 0);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        // However, getLocations() of some splits could return an empty array (length is 0),<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        // so drop the verification on length.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        // TODO: investigate how to verify split.getLocations() when localityEnabled is true<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        Assert.assertTrue(split.getLocations() != null);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      } else {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>        Assert.assertTrue(split.getLocations() != null &amp;&amp; split.getLocations().length == 0);<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      }<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>      // validate record reader<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      OutputCollector collector = mock(OutputCollector.class);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      Reporter reporter = mock(Reporter.class);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      RecordReader&lt;ImmutableBytesWritable, Result&gt; rr = tsif.getRecordReader(split, job, reporter);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // validate we can read all the data back<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      ImmutableBytesWritable key = rr.createKey();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      Result value = rr.createValue();<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      while (rr.next(key, value)) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        verifyRowFromMap(key, value);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        rowTracker.addRow(key.copyBytes());<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>      rr.close();<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>    // validate all rows are seen<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    rowTracker.validate();<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>  @Override<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  protected void testWithMapReduceImpl(HBaseTestingUtility util, TableName tableName,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      String snapshotName, Path tableDir, int numRegions, int numSplitsPerRegion, int expectedNumSplits,<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      boolean shutdownCluster) throws Exception {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    doTestWithMapReduce(util, tableName, snapshotName, getStartRow(), getEndRow(), tableDir,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      numRegions, numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  // this is also called by the IntegrationTestTableSnapshotInputFormat<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  public static void doTestWithMapReduce(HBaseTestingUtility util, TableName tableName,<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      String snapshotName, byte[] startRow, byte[] endRow, Path tableDir, int numRegions,<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      int numSplitsPerRegion,int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.273"></a>
+<span class="sourceLineNo">274</span><a name="line.274"></a>
+<span class="sourceLineNo">275</span>    //create the table and snapshot<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    createTableAndSnapshot(util, tableName, snapshotName, startRow, endRow, numRegions);<a name="line.276"></a>
+<span class="sourceLineNo">277</span><a name="line.277"></a>
+<span class="sourceLineNo">278</span>    if (shutdownCluster) {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>      util.shutdownMiniHBaseCluster();<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>    try {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      // create the job<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      JobConf jobConf = new JobConf(util.getConfiguration());<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>      jobConf.setJarByClass(util.getClass());<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.addDependencyJarsForClasses(jobConf,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>        TestTableSnapshotInputFormat.class);<a name="line.288"></a>
+<span class="sourceLineNo">289</span><a name="line.289"></a>
+<span class="sourceLineNo">290</span>      if(numSplitsPerRegion &gt; 1) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.291"></a>
+<span class="sourceLineNo">292</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.292"></a>
+<span class="sourceLineNo">293</span>                NullWritable.class, jobConf, true, tableDir, new RegionSplitter.UniformSplit(),<a name="line.293"></a>
+<span class="sourceLineNo">294</span>                numSplitsPerRegion);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      } else {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        TableMapReduceUtil.initTableSnapshotMapJob(snapshotName, COLUMNS,<a name="line.296"></a>
+<span class="sourceLineNo">297</span>                TestTableSnapshotMapper.class, ImmutableBytesWritable.class,<a name="line.297"></a>
+<span class="sourceLineNo">298</span>                NullWritable.class, jobConf, true, tableDir);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span><a name="line.300"></a>
+<span class="sourceLineNo">301</span>      jobConf.setReducerClass(TestTableSnapshotInputFormat.TestTableSnapshotReducer.class);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>      jobConf.setNumReduceTasks(1);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      jobConf.setOutputFormat(NullOutputFormat.class);<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      RunningJob job = JobClient.runJob(jobConf);<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      Assert.assertTrue(job.isSuccessful());<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    } finally {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      if (!shutdownCluster) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        util.getAdmin().deleteSnapshot(snapshotName);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        util.deleteTable(tableName);<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><a name="line.314"></a>
+<span class="sourceLineNo">315</span>  @Ignore // Ignored in mapred package because it keeps failing but allowed in mapreduce package.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  @Test<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>}<a name="line.320"></a>
 
 
 
index fd3cdb4..27a0d32 100644 (file)
 <span class="sourceLineNo">108</span>  }<a name="line.108"></a>
 <span class="sourceLineNo">109</span><a name="line.109"></a>
 <span class="sourceLineNo">110</span>  @Test<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  }<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  @Test<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  // run the MR job while HBase is offline<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 8, true);<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>  // Test that snapshot restore does not create back references in the HBase root dir.<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  @Test<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinks() throws Exception {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    setupCluster();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    TableName tableName = TableName.valueOf("testRestoreSnapshotDoesNotCreateBackRefLinks");<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    String snapshotName = "foo";<a name="line.126"></a>
+<span class="sourceLineNo">111</span>  // run the MR job while HBase is offline<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public void testWithMapReduceAndOfflineHBaseMultiRegion() throws Exception {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    testWithMapReduce(UTIL, "testWithMapReduceAndOfflineHBaseMultiRegion", 10, 1, 8, true);<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>  // Test that snapshot restore does not create back references in the HBase root dir.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  @Test<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  public void testRestoreSnapshotDoesNotCreateBackRefLinks() throws Exception {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    setupCluster();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    TableName tableName = TableName.valueOf("testRestoreSnapshotDoesNotCreateBackRefLinks");<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    String snapshotName = "foo";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span><a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.126"></a>
 <span class="sourceLineNo">127</span><a name="line.127"></a>
-<span class="sourceLineNo">128</span>    try {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      createTableAndSnapshot(UTIL, tableName, snapshotName, getStartRow(), getEndRow(), 1);<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>      Path tmpTableDir = UTIL.getDataTestDirOnTestFS(snapshotName);<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>      testRestoreSnapshotDoesNotCreateBackRefLinksInit(tableName, snapshotName,tmpTableDir);<a name="line.133"></a>
-<span class="sourceLineNo">134</span><a name="line.134"></a>
-<span class="sourceLineNo">135</span>      Path rootDir = FSUtils.getRootDir(UTIL.getConfiguration());<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      for (Path regionDir : FSUtils.getRegionDirs(fs, FSUtils.getTableDir(rootDir, tableName))) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        for (Path storeDir : FSUtils.getFamilyDirs(fs, regionDir)) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          for (FileStatus status : fs.listStatus(storeDir)) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>            System.out.println(status.getPath());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>            if (StoreFileInfo.isValid(status)) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>              Path archiveStoreDir = HFileArchiveUtil.getStoreArchivePath(UTIL.getConfiguration(),<a name="line.141"></a>
-<span class="sourceLineNo">142</span>                tableName, regionDir.getName(), storeDir.getName());<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>              Path path = HFileLink.getBackReferencesDir(storeDir, status.getPath().getName());<a name="line.144"></a>
-<span class="sourceLineNo">145</span>              // assert back references directory is empty<a name="line.145"></a>
-<span class="sourceLineNo">146</span>              assertFalse("There is a back reference in " + path, fs.exists(path));<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>              path = HFileLink.getBackReferencesDir(archiveStoreDir, status.getPath().getName());<a name="line.148"></a>
-<span class="sourceLineNo">149</span>              // assert back references directory is empty<a name="line.149"></a>
-<span class="sourceLineNo">150</span>              assertFalse("There is a back reference in " + path, fs.exists(path));<a name="line.150"></a>
-<span class="sourceLineNo">151</span>            }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          }<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        }<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      }<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    } finally {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      UTIL.deleteTable(tableName);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      tearDownCluster();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public abstract void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      String snapshotName, Path tmpTableDir) throws Exception;<a name="line.163"></a>
-<span class="sourceLineNo">164</span><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  protected void testWithMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    setupCluster();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    try {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      Path tableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      TableName tableName = TableName.valueOf("testWithMapReduce");<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      testWithMapReduceImpl(util, tableName, snapshotName, tableDir, numRegions,<a name="line.171"></a>
-<span class="sourceLineNo">172</span>              numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    } finally {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>      tearDownCluster();<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><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  protected static void verifyRowFromMap(ImmutableBytesWritable key, Result result)<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    throws IOException {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    byte[] row = key.get();<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    CellScanner scanner = result.cellScanner();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    while (scanner.advance()) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      Cell cell = scanner.current();<a name="line.183"></a>
+<span class="sourceLineNo">128</span>      testRestoreSnapshotDoesNotCreateBackRefLinksInit(tableName, snapshotName,tmpTableDir);<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>      Path rootDir = FSUtils.getRootDir(UTIL.getConfiguration());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      for (Path regionDir : FSUtils.getRegionDirs(fs, FSUtils.getTableDir(rootDir, tableName))) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        for (Path storeDir : FSUtils.getFamilyDirs(fs, regionDir)) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          for (FileStatus status : fs.listStatus(storeDir)) {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>            System.out.println(status.getPath());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            if (StoreFileInfo.isValid(status)) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>              Path archiveStoreDir = HFileArchiveUtil.getStoreArchivePath(UTIL.getConfiguration(),<a name="line.136"></a>
+<span class="sourceLineNo">137</span>                tableName, regionDir.getName(), storeDir.getName());<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>              Path path = HFileLink.getBackReferencesDir(storeDir, status.getPath().getName());<a name="line.139"></a>
+<span class="sourceLineNo">140</span>              // assert back references directory is empty<a name="line.140"></a>
+<span class="sourceLineNo">141</span>              assertFalse("There is a back reference in " + path, fs.exists(path));<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>              path = HFileLink.getBackReferencesDir(archiveStoreDir, status.getPath().getName());<a name="line.143"></a>
+<span class="sourceLineNo">144</span>              // assert back references directory is empty<a name="line.144"></a>
+<span class="sourceLineNo">145</span>              assertFalse("There is a back reference in " + path, fs.exists(path));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>            }<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>        }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      }<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    } finally {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      UTIL.getAdmin().deleteSnapshot(snapshotName);<a name="line.151"></a>
+<span class="sourceLineNo">152</span>      UTIL.deleteTable(tableName);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      tearDownCluster();<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    }<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  }<a name="line.155"></a>
+<span class="sourceLineNo">156</span><a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public abstract void testRestoreSnapshotDoesNotCreateBackRefLinksInit(TableName tableName,<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      String snapshotName, Path tmpTableDir) throws Exception;<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  protected void testWithMapReduce(HBaseTestingUtility util, String snapshotName,<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      int numRegions, int numSplitsPerRegion, int expectedNumSplits, boolean shutdownCluster) throws Exception {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    setupCluster();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      Path tableDir = util.getDataTestDirOnTestFS(snapshotName);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      TableName tableName = TableName.valueOf("testWithMapReduce");<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      testWithMapReduceImpl(util, tableName, snapshotName, tableDir, numRegions,<a name="line.166"></a>
+<span class="sourceLineNo">167</span>              numSplitsPerRegion, expectedNumSplits, shutdownCluster);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    } finally {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      tearDownCluster();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  }<a name="line.171"></a>
+<span class="sourceLineNo">172</span><a name="line.172"></a>
+<span class="sourceLineNo">173</span>  protected static void verifyRowFromMap(ImmutableBytesWritable key, Result result)<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    throws IOException {<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    byte[] row = key.get();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    CellScanner scanner = result.cellScanner();<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    while (scanner.advance()) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      Cell cell = scanner.current();<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>      //assert that all Cells in the Result have the same key<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      Assert.assertEquals(0, Bytes.compareTo(row, 0, row.length,<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength()));<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    }<a name="line.183"></a>
 <span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>      //assert that all Cells in the Result have the same key<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      Assert.assertEquals(0, Bytes.compareTo(row, 0, row.length,<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        cell.getRowArray(), cell.getRowOffset(), cell.getRowLength()));<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>    for (int j = 0; j &lt; FAMILIES.length; j++) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      byte[] actual = result.getValue(FAMILIES[j], FAMILIES[j]);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      Assert.assertArrayEquals("Row in snapshot does not match, expected:" + Bytes.toString(row)<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        + " ,actual:" + Bytes.toString(actual), row, actual);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
-<span class="sourceLineNo">196</span><a name="line.196"></a>
-<span class="sourceLineNo">197</span>  protected static void createTableAndSnapshot(HBaseTestingUtility util, TableName tableName,<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    String snapshotName, byte[] startRow, byte[] endRow, int numRegions)<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    throws Exception {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    try {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      LOG.debug("Ensuring table doesn't exist.");<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      util.deleteTable(tableName);<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    } catch(Exception ex) {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      // ignore<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>    LOG.info("creating table '" + tableName + "'");<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    if (numRegions &gt; 1) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>      util.createTable(tableName, FAMILIES, 1, startRow, endRow, numRegions);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    } else {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      util.createTable(tableName, FAMILIES);<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    Admin admin = util.getAdmin();<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>    LOG.info("put some stuff in the table");<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    Table table = util.getConnection().getTable(tableName);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    util.loadTable(table, FAMILIES);<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>    Path rootDir = FSUtils.getRootDir(util.getConfiguration());<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    FileSystem fs = rootDir.getFileSystem(util.getConfiguration());<a name="line.220"></a>
-<span class="sourceLineNo">221</span><a name="line.221"></a>
-<span class="sourceLineNo">222</span>    LOG.info("snapshot");<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    SnapshotTestingUtils.createSnapshotAndValidate(admin, tableName,<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      Arrays.asList(FAMILIES), null, snapshotName, rootDir, fs, true);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>    LOG.info("load different values");<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    byte[] value = Bytes.toBytes("after_snapshot_value");<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    util.loadTable(table, FAMILIES, value);<a name="line.228"></a>
+<span class="sourceLineNo">185</span>    for (int j = 0; j &lt; FAMILIES.length; j++) {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      byte[] actual = result.getValue(FAMILIES[j], FAMILIES[j]);<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      Assert.assertArrayEquals("Row in snapshot does not match, expected:" + Bytes.toString(row)<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        + " ,actual:" + Bytes.toString(actual), row, actual);<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>  protected static void createTableAndSnapshot(HBaseTestingUtility util, TableName tableName,<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    String snapshotName, byte[] startRow, byte[] endRow, int numRegions)<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    throws Exception {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    try {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      LOG.debug("Ensuring table doesn't exist.");<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      util.deleteTable(tableName);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    } catch(Exception ex) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      // ignore<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    LOG.info("creating table '" + tableName + "'");<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    if (numRegions &gt; 1) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      util.createTable(tableName, FAMILIES, 1, startRow, endRow, numRegions);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      util.createTable(tableName, FAMILIES);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    Admin admin = util.getAdmin();<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>    LOG.info("put some stuff in the table");<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    Table table = util.getConnection().getTable(tableName);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    util.loadTable(table, FAMILIES);<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>    Path rootDir = FSUtils.getRootDir(util.getConfiguration());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    FileSystem fs = rootDir.getFileSystem(util.getConfiguration());<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>    LOG.info("snapshot");<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    SnapshotTestingUtils.createSnapshotAndValidate(admin, tableName,<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      Arrays.asList(FAMILIES), null, snapshotName, rootDir, fs, true);<a name="line.219"></a>
+<span class="sourceLineNo">220</span><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    LOG.info("load different values");<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    byte[] value = Bytes.toBytes("after_snapshot_value");<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    util.loadTable(table, FAMILIES, value);<a name="line.223"></a>
+<span class="sourceLineNo">224</span><a name="line.224"></a>
+<span class="sourceLineNo">225</span>    LOG.info("cause flush to create new files in the region");<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    admin.flush(tableName);<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    table.close();<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>    LOG.info("cause flush to create new files in the region");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    admin.flush(tableName);<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    table.close();<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  }<a name="line.233"></a>
-<span class="sourceLineNo">234</span><a name="line.234"></a>
-<span class="sourceLineNo">235</span>}<a name="line.235"></a>
+<span class="sourceLineNo">230</span>}<a name="line.230"></a>
 
 
 
index 9091ed6..0d97bd9 100644 (file)
 <span class="sourceLineNo">473</span>      }<a name="line.473"></a>
 <span class="sourceLineNo">474</span>    }<a name="line.474"></a>
 <span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>}<a name="line.476"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>  @Test<a name="line.477"></a>
+<span class="sourceLineNo">478</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>}<a name="line.481"></a>
 
 
 
index 9091ed6..0d97bd9 100644 (file)
 <span class="sourceLineNo">473</span>      }<a name="line.473"></a>
 <span class="sourceLineNo">474</span>    }<a name="line.474"></a>
 <span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>}<a name="line.476"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>  @Test<a name="line.477"></a>
+<span class="sourceLineNo">478</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>}<a name="line.481"></a>
 
 
 
index 9091ed6..0d97bd9 100644 (file)
 <span class="sourceLineNo">473</span>      }<a name="line.473"></a>
 <span class="sourceLineNo">474</span>    }<a name="line.474"></a>
 <span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>}<a name="line.476"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>  @Test<a name="line.477"></a>
+<span class="sourceLineNo">478</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>}<a name="line.481"></a>
 
 
 
index 9091ed6..0d97bd9 100644 (file)
 <span class="sourceLineNo">473</span>      }<a name="line.473"></a>
 <span class="sourceLineNo">474</span>    }<a name="line.474"></a>
 <span class="sourceLineNo">475</span>  }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>}<a name="line.476"></a>
+<span class="sourceLineNo">476</span><a name="line.476"></a>
+<span class="sourceLineNo">477</span>  @Test<a name="line.477"></a>
+<span class="sourceLineNo">478</span>  public void testWithMapReduceMultipleMappersPerRegion() throws Exception {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    testWithMapReduce(UTIL, "testWithMapReduceMultiRegion", 10, 5, 50, false);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  }<a name="line.480"></a>
+<span class="sourceLineNo">481</span>}<a name="line.481"></a>