You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2020/09/15 20:55:23 UTC

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

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new e3cefa4  Published site at 325317ff9ef0168f37e47f506a8947701e1919a4.
e3cefa4 is described below

commit e3cefa4189e690a7feeb695c6cbe6b6aede0d0f2
Author: jenkins <bu...@apache.org>
AuthorDate: Tue Sep 15 20:55:05 2020 +0000

    Published site at 325317ff9ef0168f37e47f506a8947701e1919a4.
---
 acid-semantics.html                                |   2 +-
 apache_hbase_reference_guide.pdf                   |   4 +-
 apidocs/deprecated-list.html                       |  41 +-
 apidocs/index-all.html                             |  13 +
 .../hbase/mapreduce/TableRecordReaderImpl.html     |  93 +++-
 .../hbase/mapreduce/TableRecordReaderImpl.html     | 598 +++++++++++----------
 book.html                                          |   2 +-
 bulk-loads.html                                    |   2 +-
 checkstyle-aggregate.html                          |  38 +-
 coc.html                                           |   2 +-
 dependencies.html                                  |   2 +-
 dependency-convergence.html                        |   2 +-
 dependency-info.html                               |   2 +-
 dependency-management.html                         |   2 +-
 devapidocs/deprecated-list.html                    |  77 +--
 devapidocs/index-all.html                          |  13 +
 .../apache/hadoop/hbase/backup/package-tree.html   |   4 +-
 .../client/metrics/class-use/ScanMetrics.html      |  13 +
 .../apache/hadoop/hbase/client/package-tree.html   |  22 +-
 .../apache/hadoop/hbase/executor/package-tree.html |   2 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |   8 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |   2 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |   6 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |   2 +-
 .../hbase/mapreduce/TableRecordReaderImpl.html     | 129 +++--
 .../hadoop/hbase/mapreduce/package-tree.html       |   4 +-
 .../apache/hadoop/hbase/master/package-tree.html   |   8 +-
 .../hbase/master/procedure/package-tree.html       |   2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |  14 +-
 .../hadoop/hbase/procedure2/package-tree.html      |   6 +-
 .../hbase/procedure2/store/wal/package-tree.html   |   2 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |   8 +-
 .../hadoop/hbase/regionserver/package-tree.html    |  16 +-
 .../regionserver/querymatcher/package-tree.html    |   2 +-
 .../hbase/regionserver/wal/package-tree.html       |   2 +-
 .../hadoop/hbase/replication/package-tree.html     |   2 +-
 .../hadoop/hbase/rest/model/package-tree.html      |   2 +-
 .../hadoop/hbase/security/access/package-tree.html |   4 +-
 .../apache/hadoop/hbase/security/package-tree.html |   2 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |   2 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |  10 +-
 .../hbase/mapreduce/TableRecordReaderImpl.html     | 598 +++++++++++----------
 downloads.html                                     |   2 +-
 export_control.html                                |   2 +-
 index.html                                         |   2 +-
 issue-tracking.html                                |   2 +-
 mail-lists.html                                    |   2 +-
 metrics.html                                       |   2 +-
 old_news.html                                      |   2 +-
 plugin-management.html                             |   2 +-
 plugins.html                                       |   2 +-
 poweredbyhbase.html                                |   2 +-
 project-info.html                                  |   2 +-
 project-reports.html                               |   2 +-
 project-summary.html                               |   2 +-
 pseudo-distributed.html                            |   2 +-
 replication.html                                   |   2 +-
 resources.html                                     |   2 +-
 source-repository.html                             |   2 +-
 sponsors.html                                      |   2 +-
 supportingprojects.html                            |   2 +-
 team-list.html                                     |   2 +-
 62 files changed, 1022 insertions(+), 783 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index d738894..615d8f0 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -467,7 +467,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 0db7d6c..4c4ec31 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.rc.2, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20200914203958+00'00')
-/CreationDate (D:20200914204912+00'00')
+/ModDate (D:20200915204149+00'00')
+/CreationDate (D:20200915205127+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/deprecated-list.html b/apidocs/deprecated-list.html
index ca1ec67..8342b35 100644
--- a/apidocs/deprecated-list.html
+++ b/apidocs/deprecated-list.html
@@ -723,76 +723,81 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.retrieveGetCounterWithStringsParams(TaskAttemptContext)</a>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setAsyncPrefetch-boolean-">org.apache.hadoop.hbase.client.Scan.setAsyncPrefetch(boolean)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. After building sync client upon async
              client, the implementation is always 'async prefetch', so this flag is useless now.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setBandwidth-long-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setBandwidth(long)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setBandwidth-long-"><code>ReplicationPeerConfigBuilder.setBandwidth(long)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setClusterKey-java.lang.String-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setClusterKey(String)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setClusterKey-java.lang.String-"><code>ReplicationPeerConfigBuilder.setClusterKey(String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setExcludeNamespaces-java.util.Set-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setExcludeNamespaces(Set&lt;String&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setExcludeNamespaces-java.util.Set-"><code>ReplicationPeerConfigBuilder.setExcludeNamespaces(Set)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setExcludeTableCFsMap-java.util.Map-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setExcludeTableCFsMap(Map&lt;TableName, ? extends Collection&lt;String&gt;&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setExcludeTableCFsMap-java.util.Map-"><code>ReplicationPeerConfigBuilder.setExcludeTableCFsMap(Map)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setNamespaces-java.util.Set-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setNamespaces(Set&lt;String&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setNamespaces-java.util.Set-"><code>ReplicationPeerConfigBuilder.setNamespaces(Set)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutator.html#setOperationTimeout-int-">org.apache.hadoop.hbase.client.BufferedMutator.setOperationTimeout(int)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. Please set this through the
              <a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client"><code>BufferedMutatorParams</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwner-org.apache.hadoop.hbase.security.User-">org.apache.hadoop.hbase.client.TableDescriptorBuilder.setOwner(User)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwnerString-java.lang.String-">org.apache.hadoop.hbase.client.TableDescriptorBuilder.setOwnerString(String)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setReplicateAllUserTables-boolean-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setReplicateAllUserTables(boolean)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setReplicateAllUserTables-boolean-"><code>ReplicationPeerConfigBuilder.setReplicateAllUserTables(boolean)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setReplicationEndpointImpl-java.lang.String-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setReplicationEndpointImpl(String)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setReplicationEndpointImpl-java.lang.String-"><code>ReplicationPeerConfigBuilder.setReplicationEndpointImpl(String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutator.html#setRpcTimeout-int-">org.apache.hadoop.hbase.client.BufferedMutator.setRpcTimeout(int)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. Please set this through the
              <a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client"><code>BufferedMutatorParams</code></a>.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">org.apache.hadoop.hbase.client.Scan.setSmall(boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>Scan.setLimit(int)</code></a> and
    <a href="org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>Scan.setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
@@ -800,24 +805,30 @@
    the scanner automatically which means we will fall back to one rpc.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setTableCFsMap-java.util.Map-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setTableCFsMap(Map&lt;TableName, ? extends Collection&lt;String&gt;&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setTableCFsMap-java.util.Map-"><code>ReplicationPeerConfigBuilder.setTableCFsMap(Map)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">org.apache.hadoop.hbase.client.Scan.setTimeStamp(long)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>Scan.setTimestamp(long)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html#setWriteBufferPeriodicFlushTimerTickMs-long-">org.apache.hadoop.hbase.client.BufferedMutatorParams.setWriteBufferPeriodicFlushTimerTickMs(long)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. We use a common timer in the whole client
              implementation so you can not set it any more.</span></div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.updateCounters(ScanMetrics, long, Method, TaskAttemptContext, long)</a>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>TableRecordReaderImpl.updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</td>
+</tr>
 <tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/io/TimeRange.html#withinTimeRange-byte:A-int-">org.apache.hadoop.hbase.io.TimeRange.withinTimeRange(byte[], int)</a>
 <div class="block"><span class="deprecationComment">This is made @InterfaceAudience.Private in the 2.0 line and above and may be
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 53f8f7f..38903ed 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -12997,6 +12997,12 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html#RetriesExhaustedWithDetailsException-java.util.List-java.util.List-java.util.List-">RetriesExhaustedWithDetailsException(List&lt;Throwable&gt;, List&lt;Row&gt;, List&lt;String&gt;)</a></span> - Constructor for exception org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html" title="class in org.apache.hadoop.hbase.cli [...]
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">retrieveGetCounterWithStringsParams(TaskAttemptContext)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReaderImpl</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#RETRY_BACKOFF">RETRY_BACKOFF</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>
 <div class="block">Retrying we multiply hbase.client.pause setting by what we have in this array until we
@@ -16464,6 +16470,13 @@ service.</div>
 <div class="block">Update the configuration and trigger an online config change on all the masters and
  regionservers.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters(ScanMetrics, long, Method, TaskAttemptContext, long)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html" title="class in org.apache.had [...]
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>TableRecordReaderImpl.updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters(ScanMetrics, long, TaskAttemptContext, long)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordR [...]
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Admin.html#updateReplicationPeerConfig-java.lang.String-org.apache.hadoop.hbase.replication.ReplicationPeerConfig-">updateReplicationPeerConfig(String, ReplicationPeerConfig)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
diff --git a/apidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html b/apidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
index f94f4ec..0c6202a 100644
--- a/apidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
+++ b/apidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
@@ -18,8 +18,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":41,"i8":10,"i9":10,"i10":41,"i11":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.46">TableRecordReaderImpl</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.47">TableRecordReaderImpl</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Iterate over an HBase table data, return (ImmutableBytesWritable, Result)
  pairs.</div>
@@ -163,7 +163,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd [...]
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd [...]
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
@@ -212,18 +212,39 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">retrieveGetCounterWithStringsParams</a></span>(org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+</div>
+</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/mapreduce/TableRecordReaderImpl.html#setHTable-org.apache.hadoop.hbase.client.Table-">setHTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;htable)</code>
 <div class="block">Sets the HBase table.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#setScan-org.apache.hadoop.hbase.client.Scan-">setScan</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</code>
 <div class="block">Sets the scan defining the actual details like columns etc.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" 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/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters</a></span>(org.apache.hadoop.hbase.client.metrics.ScanMetrics&nbsp;scanMetrics,
+              long&nbsp;numScannerRestarts,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;getCounter,
+              org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
+              long&nbsp;numStale)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters</a></span>(org.apache.hadoop.hbase.client.metrics.ScanMetrics&nbsp;scanMetrics,
               long&nbsp;numScannerRestarts,
@@ -258,7 +279,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>LOG_PER_ROW_COUNT</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.47">LOG_PER_ROW_COUNT</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.48">LOG_PER_ROW_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.LOG_PER_ROW_COUNT">Constant Field Values</a></dd>
@@ -279,7 +300,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableRecordReaderImpl</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.46">TableRecordReaderImpl</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.47">TableRecordReaderImpl</a>()</pre>
 </li>
 </ul>
 </li>
@@ -296,7 +317,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.76">restart</a>(byte[]&nbsp;firstRow)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.77">restart</a>(byte[]&nbsp;firstRow)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Restart from survivable exceptions by creating a new scanner.</div>
 <dl>
@@ -307,13 +328,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>retrieveGetCounterWithStringsParams</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.106">retrieveGetCounterWithStringsParams</a>(org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)
+                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+<div class="block">In new mapreduce APIs, TaskAttemptContext has two getCounter methods
+ Check if getCounter(String, String) method is available.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The getCounter method or null if not available.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="setHTable-org.apache.hadoop.hbase.client.Table-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setHTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.102">setHTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;htable)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.124">setHTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;htable)</pre>
 <div class="block">Sets the HBase table.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -327,7 +368,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.114">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.136">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
 <div class="block">Sets the scan defining the actual details like columns etc.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -341,7 +382,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.121">initialize</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;inputsplit,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.143">initialize</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;inputsplit,
                        org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -359,7 +400,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.135">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.157">close</a>()</pre>
 <div class="block">Closes the split.</div>
 </li>
 </ul>
@@ -369,7 +410,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentKey</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.152">getCurrentKey</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.174">getCurrentKey</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Returns the current key.</div>
@@ -388,7 +429,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.164">getCurrentValue</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.186">getCurrentValue</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Returns the current value.</div>
@@ -407,7 +448,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>nextKeyValue</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.176">nextKeyValue</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.198">nextKeyValue</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Positions the record reader to the next record.</div>
@@ -420,13 +461,29 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateCounters</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.297">updateCounters</a>(org.apache.hadoop.hbase.client.metrics.ScanMetrics&nbsp;scanMetrics,
+                                                 long&nbsp;numScannerRestarts,
+                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;getCounter,
+                                                 org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
+                                                 long&nbsp;numStale)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</li>
+</ul>
 <a name="updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCounters</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.270">updateCounters</a>(org.apache.hadoop.hbase.client.metrics.ScanMetrics&nbsp;scanMetrics,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.302">updateCounters</a>(org.apache.hadoop.hbase.client.metrics.ScanMetrics&nbsp;scanMetrics,
                                      long&nbsp;numScannerRestarts,
                                      org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
                                      long&nbsp;numStale)</pre>
@@ -438,7 +495,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getProgress</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.302">getProgress</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.334">getProgress</a>()</pre>
 <div class="block">The current progress of the record reader through its data.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
index 629e5ce..5269156 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
@@ -26,293 +26,325 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.mapreduce;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.Map;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.conf.Configuration;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.ConnectionConfiguration;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.Result;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Table;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.mapreduce.Counter;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.util.StringUtils;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * Iterate over an HBase table data, return (ImmutableBytesWritable, Result)<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * pairs.<a name="line.43"></a>
-<span class="sourceLineNo">044</span> */<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@InterfaceAudience.Public<a name="line.45"></a>
-<span class="sourceLineNo">046</span>public class TableRecordReaderImpl {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static final String LOG_PER_ROW_COUNT<a name="line.47"></a>
-<span class="sourceLineNo">048</span>      = "hbase.mapreduce.log.scanner.rowcount";<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(TableRecordReaderImpl.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  // HBASE_COUNTER_GROUP_NAME is the name of mapreduce counter group for HBase<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @VisibleForTesting<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private ResultScanner scanner = null;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private Scan scan = null;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private Scan currentScan = null;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private Table htable = null;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private byte[] lastSuccessfulRow = null;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private ImmutableBytesWritable key = null;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private Result value = null;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private TaskAttemptContext context = null;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private long numRestarts = 0;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private long numStale = 0;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private long timestamp;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private int rowcount;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private boolean logScannerActivity = false;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private int logPerRowCount = 100;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * Restart from survivable exceptions by creating a new scanner.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   *<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * @param firstRow  The first row to start at.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @throws IOException When restarting fails.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public void restart(byte[] firstRow) throws IOException {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    // Update counter metrics based on current scan before reinitializing it<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    if (currentScan != null) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      updateCounters();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    }<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    currentScan = new Scan(scan);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    currentScan.withStartRow(firstRow);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    currentScan.setScanMetricsEnabled(true);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    if (this.scanner != null) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      if (logScannerActivity) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        LOG.info("Closing the previously opened scanner object.");<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      this.scanner.close();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    this.scanner = this.htable.getScanner(currentScan);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    if (logScannerActivity) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      LOG.info("Current scan=" + currentScan.toString());<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      timestamp = System.currentTimeMillis();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      rowcount = 0;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Sets the HBase table.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * @param htable The table to scan.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public void setHTable(Table htable) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    Configuration conf = htable.getConfiguration();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    logScannerActivity = conf.getBoolean(ConnectionConfiguration.LOG_SCANNER_ACTIVITY, false);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    logPerRowCount = conf.getInt(LOG_PER_ROW_COUNT, 100);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    this.htable = htable;<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>   * Sets the scan defining the actual details like columns etc.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   *<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param scan  The scan to set.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public void setScan(Scan scan) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.scan = scan;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * Build the scanner. Not done in constructor to allow for extension.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void initialize(InputSplit inputsplit,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      TaskAttemptContext context) throws IOException,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      InterruptedException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    if (context != null) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.context = context;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    restart(scan.getStartRow());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  /**<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * Closes the split.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *<a name="line.132"></a>
+<span class="sourceLineNo">021</span>import java.lang.reflect.Method;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.Map;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.conf.Configuration;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.ConnectionConfiguration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.Result;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.Table;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.mapreduce.Counter;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.util.StringUtils;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * Iterate over an HBase table data, return (ImmutableBytesWritable, Result)<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * pairs.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Public<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TableRecordReaderImpl {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static final String LOG_PER_ROW_COUNT<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      = "hbase.mapreduce.log.scanner.rowcount";<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static final Logger LOG = LoggerFactory.getLogger(TableRecordReaderImpl.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  // HBASE_COUNTER_GROUP_NAME is the name of mapreduce counter group for HBase<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  @VisibleForTesting<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private ResultScanner scanner = null;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private Scan scan = null;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Scan currentScan = null;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Table htable = null;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private byte[] lastSuccessfulRow = null;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private ImmutableBytesWritable key = null;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private Result value = null;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private TaskAttemptContext context = null;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private long numRestarts = 0;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private long numStale = 0;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private long timestamp;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private int rowcount;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private boolean logScannerActivity = false;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private int logPerRowCount = 100;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  /**<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * Restart from survivable exceptions by creating a new scanner.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   *<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * @param firstRow  The first row to start at.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * @throws IOException When restarting fails.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  public void restart(byte[] firstRow) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    // Update counter metrics based on current scan before reinitializing it<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    if (currentScan != null) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      updateCounters();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    currentScan = new Scan(scan);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    currentScan.withStartRow(firstRow);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    currentScan.setScanMetricsEnabled(true);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    if (this.scanner != null) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      if (logScannerActivity) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        LOG.info("Closing the previously opened scanner object.");<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      this.scanner.close();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.scanner = this.htable.getScanner(currentScan);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    if (logScannerActivity) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      LOG.info("Current scan=" + currentScan.toString());<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      timestamp = System.currentTimeMillis();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      rowcount = 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * In new mapreduce APIs, TaskAttemptContext has two getCounter methods<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Check if getCounter(String, String) method is available.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @return The getCounter method or null if not available.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * @deprecated since 2.4.0 and 2.3.2, will be removed in 4.0.0<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Deprecated<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected static Method retrieveGetCounterWithStringsParams(TaskAttemptContext context)<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    throws IOException {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    Method m = null;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    try {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m = context.getClass().getMethod("getCounter",<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        new Class [] {String.class, String.class});<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    } catch (SecurityException e) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      throw new IOException("Failed test for getCounter", e);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    } catch (NoSuchMethodException e) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      // Ignore<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    return m;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  /**<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * Sets the HBase table.<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @param htable The table to scan.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void setHTable(Table htable) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    Configuration conf = htable.getConfiguration();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    logScannerActivity = conf.getBoolean(ConnectionConfiguration.LOG_SCANNER_ACTIVITY, false);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    logPerRowCount = conf.getInt(LOG_PER_ROW_COUNT, 100);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.htable = htable;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * Sets the scan defining the actual details like columns etc.<a name="line.132"></a>
 <span class="sourceLineNo">133</span>   *<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void close() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    if (this.scanner != null) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.scanner.close();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    try {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      this.htable.close();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    } catch (IOException ioe) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      LOG.warn("Error closing table", ioe);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Returns the current key.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   *<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @return The current key.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @throws InterruptedException When the job is aborted.<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public ImmutableBytesWritable getCurrentKey() throws IOException,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      InterruptedException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    return key;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  /**<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * Returns the current value.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   *<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @return The current value.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @throws IOException When the value is faulty.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @throws InterruptedException When the job is aborted.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return value;<a name="line.165"></a>
+<span class="sourceLineNo">134</span>   * @param scan  The scan to set.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public void setScan(Scan scan) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    this.scan = scan;<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>   * Build the scanner. Not done in constructor to allow for extension.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  public void initialize(InputSplit inputsplit,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      TaskAttemptContext context) throws IOException,<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      InterruptedException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    if (context != null) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      this.context = context;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    restart(scan.getStartRow());<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * Closes the split.<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 void close() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    if (this.scanner != null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      this.scanner.close();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    try {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      this.htable.close();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (IOException ioe) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      LOG.warn("Error closing table", ioe);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
 <span class="sourceLineNo">166</span>  }<a name="line.166"></a>
 <span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Positions the record reader to the next record.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   *<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return &lt;code&gt;true&lt;/code&gt; if there was another record.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @throws IOException When reading the record failed.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @throws InterruptedException When the job was aborted.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    if (key == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      key = new ImmutableBytesWritable();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (value == null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      value = new Result();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    try {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      try {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        value = this.scanner.next();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>          numStale++;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        if (logScannerActivity) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          rowcount ++;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          if (rowcount &gt;= logPerRowCount) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>            long now = System.currentTimeMillis();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>            LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>            timestamp = now;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            rowcount = 0;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      } catch (IOException e) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        // do not retry if the exception tells us not to do so<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        if (e instanceof DoNotRetryIOException) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          updateCounters();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>          throw e;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        // try to handle all other IOExceptions by restarting<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        // the scanner, if the second call fails, it will be rethrown<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.info("recovered from " + StringUtils.stringifyException(e));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        if (lastSuccessfulRow == null) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          LOG.warn("We are restarting the first next() invocation," +<a name="line.208"></a>
-<span class="sourceLineNo">209</span>              " if your mapper has restarted a few other times like this" +<a name="line.209"></a>
-<span class="sourceLineNo">210</span>              " then you should consider killing this job and investigate" +<a name="line.210"></a>
-<span class="sourceLineNo">211</span>              " why it's taking so long.");<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        if (lastSuccessfulRow == null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          restart(scan.getStartRow());<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        } else {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          restart(lastSuccessfulRow);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          scanner.next();    // skip presumed already mapped row<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        value = scanner.next();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          numStale++;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        numRestarts++;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>      if (value != null &amp;&amp; value.size() &gt; 0) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        key.set(value.getRow());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        lastSuccessfulRow = key.get();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        return true;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // Need handle cursor result<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      if (value != null &amp;&amp; value.isCursor()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        key.set(value.getCursor().getRow());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        lastSuccessfulRow = key.get();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        return true;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      updateCounters();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      return false;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } catch (IOException ioe) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      updateCounters();<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      if (logScannerActivity) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        long now = System.currentTimeMillis();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        LOG.info(ioe.toString(), ioe);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        String lastRow = lastSuccessfulRow == null ?<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          "null" : Bytes.toStringBinary(lastSuccessfulRow);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        LOG.info("lastSuccessfulRow=" + lastRow);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      throw ioe;<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><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * If hbase runs on new version of mapreduce, RecordReader has access to<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * counters thus can update counters based on scanMetrics.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * If hbase runs on old version of mapreduce, it won't be able to get<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * access to counters and TableRecorderReader can't update counter values.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private void updateCounters() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    if (scanMetrics == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      return;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    updateCounters(scanMetrics, numRestarts, context, numStale);<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>  protected static void updateCounters(ScanMetrics scanMetrics, long numScannerRestarts,<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      TaskAttemptContext context, long numStale) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    // we can get access to counters only if hbase uses new mapreduce APIs<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (context == null) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">168</span>  /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * Returns the current key.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   *<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * @return The current key.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @throws InterruptedException When the job is aborted.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public ImmutableBytesWritable getCurrentKey() throws IOException,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      InterruptedException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    return key;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * Returns the current value.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   *<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @return The current value.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @throws IOException When the value is faulty.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @throws InterruptedException When the job is aborted.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return value;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * Positions the record reader to the next record.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   *<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * @return &lt;code&gt;true&lt;/code&gt; if there was another record.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * @throws IOException When reading the record failed.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @throws InterruptedException When the job was aborted.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    if (key == null) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      key = new ImmutableBytesWritable();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (value == null) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      value = new Result();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    try {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      try {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        value = this.scanner.next();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          numStale++;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        if (logScannerActivity) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          rowcount ++;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          if (rowcount &gt;= logPerRowCount) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>            long now = System.currentTimeMillis();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>            LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>            timestamp = now;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            rowcount = 0;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      } catch (IOException e) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        // do not retry if the exception tells us not to do so<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        if (e instanceof DoNotRetryIOException) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          updateCounters();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          throw e;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        // try to handle all other IOExceptions by restarting<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // the scanner, if the second call fails, it will be rethrown<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        LOG.info("recovered from " + StringUtils.stringifyException(e));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        if (lastSuccessfulRow == null) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          LOG.warn("We are restarting the first next() invocation," +<a name="line.230"></a>
+<span class="sourceLineNo">231</span>              " if your mapper has restarted a few other times like this" +<a name="line.231"></a>
+<span class="sourceLineNo">232</span>              " then you should consider killing this job and investigate" +<a name="line.232"></a>
+<span class="sourceLineNo">233</span>              " why it's taking so long.");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        }<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        if (lastSuccessfulRow == null) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          restart(scan.getStartRow());<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        } else {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          restart(lastSuccessfulRow);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          scanner.next();    // skip presumed already mapped row<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        value = scanner.next();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          numStale++;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        numRestarts++;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (value != null &amp;&amp; value.size() &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        key.set(value.getRow());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        lastSuccessfulRow = key.get();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        return true;<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>      // Need handle cursor result<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      if (value != null &amp;&amp; value.isCursor()) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        key.set(value.getCursor().getRow());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        lastSuccessfulRow = key.get();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        return true;<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>      updateCounters();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      return false;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    } catch (IOException ioe) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      updateCounters();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      if (logScannerActivity) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        long now = System.currentTimeMillis();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        LOG.info(ioe.toString(), ioe);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        String lastRow = lastSuccessfulRow == null ?<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          "null" : Bytes.toStringBinary(lastSuccessfulRow);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        LOG.info("lastSuccessfulRow=" + lastRow);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throw ioe;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    }<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
 <span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>      for (Map.Entry&lt;String, Long&gt; entry : scanMetrics.getMetricsMap().entrySet()) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, entry.getKey());<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        if (counter != null) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          counter.increment(entry.getValue());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      if (numScannerRestarts != 0L) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCANNER_RESTARTS");<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        if (counter != null) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          counter.increment(numScannerRestarts);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if (numStale != 0L) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCAN_RESULTS_STALE");<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        if (counter != null) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          counter.increment(numStale);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * The current progress of the record reader through its data.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   *<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * @return A number between 0.0 and 1.0, the fraction of the data read.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public float getProgress() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    // Depends on the total number of tuples<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return 0;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>}<a name="line.307"></a>
+<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * If hbase runs on new version of mapreduce, RecordReader has access to<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * counters thus can update counters based on scanMetrics.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * If hbase runs on old version of mapreduce, it won't be able to get<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * access to counters and TableRecorderReader can't update counter values.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  private void updateCounters() {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    if (scanMetrics == null) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    updateCounters(scanMetrics, numRestarts, context, numStale);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * @deprecated since 2.4.0 and 2.3.2, will be removed in 4.0.0<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   *   Use {@link #updateCounters(ScanMetrics, long, TaskAttemptContext, long)} instead.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Deprecated<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  protected static void updateCounters(ScanMetrics scanMetrics, long numScannerRestarts,<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      Method getCounter, TaskAttemptContext context, long numStale) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    updateCounters(scanMetrics, numScannerRestarts, context, numStale);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  protected static void updateCounters(ScanMetrics scanMetrics, long numScannerRestarts,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      TaskAttemptContext context, long numStale) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // we can get access to counters only if hbase uses new mapreduce APIs<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (context == null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      return;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>      for (Map.Entry&lt;String, Long&gt; entry : scanMetrics.getMetricsMap().entrySet()) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, entry.getKey());<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        if (counter != null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          counter.increment(entry.getValue());<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (numScannerRestarts != 0L) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCANNER_RESTARTS");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        if (counter != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          counter.increment(numScannerRestarts);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (numStale != 0L) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCAN_RESULTS_STALE");<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (counter != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          counter.increment(numStale);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  /**<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * The current progress of the record reader through its data.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   *<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @return A number between 0.0 and 1.0, the fraction of the data read.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public float getProgress() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    // Depends on the total number of tuples<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return 0;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>}<a name="line.339"></a>
 
 
 
diff --git a/book.html b/book.html
index b935865..2071caf 100644
--- a/book.html
+++ b/book.html
@@ -46073,7 +46073,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2020-09-14 20:39:58 UTC
+Last updated 2020-09-15 20:41:49 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index 8d50e70..17172fc 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -172,7 +172,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index b4f62f0..f695fc5 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -35721,109 +35721,109 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 6, expected level should be 4.</td>
-<td>277</td></tr>
+<td>309</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>278</td></tr>
+<td>310</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 6.</td>
-<td>279</td></tr>
+<td>311</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>280</td></tr>
+<td>312</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 6.</td>
-<td>281</td></tr>
+<td>313</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 6, expected level should be 4.</td>
-<td>282</td></tr>
+<td>314</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 6, expected level should be 4.</td>
-<td>283</td></tr>
+<td>315</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>284</td></tr>
+<td>316</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 6.</td>
-<td>285</td></tr>
+<td>317</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>286</td></tr>
+<td>318</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 6.</td>
-<td>287</td></tr>
+<td>319</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
-<td>288</td></tr>
+<td>320</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 6, expected level should be 4.</td>
-<td>289</td></tr>
+<td>321</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>290</td></tr>
+<td>322</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 6.</td>
-<td>291</td></tr>
+<td>323</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 8.</td>
-<td>292</td></tr>
+<td>324</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 6.</td>
-<td>293</td></tr>
+<td>325</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
-<td>294</td></tr></table></div>
+<td>326</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.mapreduce.TableReducer.java">org/apache/hadoop/hbase/mapreduce/TableReducer.java</h3>
 <table border="0" class="table table-striped">
@@ -76023,7 +76023,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index 478fa6e..4b3dd83 100644
--- a/coc.html
+++ b/coc.html
@@ -241,7 +241,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index 0236003..2ac8b09 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -313,7 +313,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 1f018a3..f6a365b 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -824,7 +824,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index 529a28d..9a19e7e 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -194,7 +194,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index dfe96a6..f0b6972 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1019,7 +1019,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/deprecated-list.html b/devapidocs/deprecated-list.html
index b7c8452..e961cdd 100644
--- a/devapidocs/deprecated-list.html
+++ b/devapidocs/deprecated-list.html
@@ -1712,136 +1712,141 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.retrieveGetCounterWithStringsParams(TaskAttemptContext)</a>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#revoke-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">org.apache.hadoop.hbase.security.access.AccessControlUtil.revoke(RpcController, AccessControlProtos.AccessControlService.BlockingInterface, Str [...]
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/client/Admin.html#revoke-org.apache.hadoop.hbase.security.access.UserPermission-"><code>Admin.revoke(UserPermission)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#revoke-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-java.lang.String-org.apache.hadoop.hbase.security.access.Permission.Action...-">org.apache.hadoop.hbase.security.access.AccessControlUtil.revoke(RpcController, AccessControlProtos.AccessControlService.Block [...]
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/client/Admin.html#revoke-org.apache.hadoop.hbase.security.access.UserPermission-"><code>Admin.revoke(UserPermission)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/access/AccessControlUtil.html#revoke-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.AccessControlService.BlockingInterface-java.lang.String-org.apache.hadoop.hbase.TableName-byte:A-byte:A-org.apache.hadoop.hbase.security.access.Permission.Action...-">org.apache.hadoop.hbase.security.access.AccessControlUtil.revoke(RpcController, AccessControlPr [...]
 <div class="block"><span class="deprecationComment">Use <a href="org/apache/hadoop/hbase/client/Admin.html#revoke-org.apache.hadoop.hbase.security.access.UserPermission-"><code>Admin.revoke(UserPermission)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/access/AccessController.html#revoke-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AccessControlProtos.RevokeRequest-org.apache.hbase.thirdparty.com.google.protobuf.RpcCallback-">org.apache.hadoop.hbase.security.access.AccessController.revoke(RpcController, AccessControlProtos.RevokeRequest, RpcCallback&lt;AccessControlProtos.RevokeResponse&gt;)</a>
 <div class="block"><span class="deprecationComment">since 2.2.0 and will be removed in 4.0.0. Use <a href="org/apache/hadoop/hbase/client/Admin.html#revoke-org.apache.hadoop.hbase.security.access.UserPermission-"><code>Admin.revoke(UserPermission)</code></a>
    instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Hbck.html#scheduleServerCrashProcedure-java.util.List-">org.apache.hadoop.hbase.client.Hbck.scheduleServerCrashProcedure(List&lt;HBaseProtos.ServerName&gt;)</a>
 <div class="block"><span class="deprecationComment">since 2.2.1. Will removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setAsyncPrefetch-boolean-">org.apache.hadoop.hbase.client.Scan.setAsyncPrefetch(boolean)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. After building sync client upon async
              client, the implementation is always 'async prefetch', so this flag is useless now.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setAsyncPrefetch-boolean-">org.apache.hadoop.hbase.client.ImmutableScan.setAsyncPrefetch(boolean)</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setBandwidth-long-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setBandwidth(long)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setBandwidth-long-"><code>ReplicationPeerConfigBuilder.setBandwidth(long)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html#setBindAddress-java.lang.String-">org.apache.hadoop.hbase.http.HttpServer.Builder.setBindAddress(String)</a>
 <div class="block"><span class="deprecationComment">Since 0.99.0. Use <a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html#addEndpoint-java.net.URI-"><code>HttpServer.Builder.addEndpoint(URI)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setClusterKey-java.lang.String-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setClusterKey(String)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setClusterKey-java.lang.String-"><code>ReplicationPeerConfigBuilder.setClusterKey(String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setCoprocessorWithSpec-java.lang.String-">org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor.setCoprocessorWithSpec(String)</a>
 <div class="block"><span class="deprecationComment">used by HTableDescriptor and admin.rb.
                        As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setExcludeNamespaces-java.util.Set-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setExcludeNamespaces(Set&lt;String&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setExcludeNamespaces-java.util.Set-"><code>ReplicationPeerConfigBuilder.setExcludeNamespaces(Set)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setExcludeTableCFsMap-java.util.Map-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setExcludeTableCFsMap(Map&lt;TableName, ? extends Collection&lt;String&gt;&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setExcludeTableCFsMap-java.util.Map-"><code>ReplicationPeerConfigBuilder.setExcludeTableCFsMap(Map)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html#setName-java.lang.String-">org.apache.hadoop.hbase.http.HttpServer.Builder.setName(String)</a>
 <div class="block"><span class="deprecationComment">Since 0.99.0. Use <a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html#setAppDir-java.lang.String-"><code>HttpServer.Builder.setAppDir(String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setNamespaces-java.util.Set-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setNamespaces(Set&lt;String&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setNamespaces-java.util.Set-"><code>ReplicationPeerConfigBuilder.setNamespaces(Set)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutator.html#setOperationTimeout-int-">org.apache.hadoop.hbase.client.BufferedMutator.setOperationTimeout(int)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. Please set this through the
              <a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client"><code>BufferedMutatorParams</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwner-org.apache.hadoop.hbase.security.User-">org.apache.hadoop.hbase.client.TableDescriptorBuilder.setOwner(User)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setOwner-org.apache.hadoop.hbase.security.User-">org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor.setOwner(User)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#setOwnerString-java.lang.String-">org.apache.hadoop.hbase.client.TableDescriptorBuilder.setOwnerString(String)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#setOwnerString-java.lang.String-">org.apache.hadoop.hbase.client.TableDescriptorBuilder.ModifyableTableDescriptor.setOwnerString(String)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html#setPort-int-">org.apache.hadoop.hbase.http.HttpServer.Builder.setPort(int)</a>
 <div class="block"><span class="deprecationComment">Since 0.99.0. Use <a href="org/apache/hadoop/hbase/http/HttpServer.Builder.html#addEndpoint-java.net.URI-"><code>HttpServer.Builder.addEndpoint(URI)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setReplicateAllUserTables-boolean-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setReplicateAllUserTables(boolean)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setReplicateAllUserTables-boolean-"><code>ReplicationPeerConfigBuilder.setReplicateAllUserTables(boolean)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setReplicationEndpointImpl-java.lang.String-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setReplicationEndpointImpl(String)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setReplicationEndpointImpl-java.lang.String-"><code>ReplicationPeerConfigBuilder.setReplicationEndpointImpl(String)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutator.html#setRpcTimeout-int-">org.apache.hadoop.hbase.client.BufferedMutator.setRpcTimeout(int)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. Please set this through the
              <a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html" title="class in org.apache.hadoop.hbase.client"><code>BufferedMutatorParams</code></a>.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setSmall-boolean-">org.apache.hadoop.hbase.client.Scan.setSmall(boolean)</a>
 <div class="block"><span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0. Use <a href="org/apache/hadoop/hbase/client/Scan.html#setLimit-int-"><code>Scan.setLimit(int)</code></a> and
    <a href="org/apache/hadoop/hbase/client/Scan.html#setReadType-org.apache.hadoop.hbase.client.Scan.ReadType-"><code>Scan.setReadType(ReadType)</code></a> instead. And for the one rpc optimization, now we will also
@@ -1849,53 +1854,59 @@
    the scanner automatically which means we will fall back to one rpc.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setSmall-boolean-">org.apache.hadoop.hbase.client.ImmutableScan.setSmall(boolean)</a></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfig.html#setTableCFsMap-java.util.Map-">org.apache.hadoop.hbase.replication.ReplicationPeerConfig.setTableCFsMap(Map&lt;TableName, ? extends Collection&lt;String&gt;&gt;)</a>
 <div class="block"><span class="deprecationComment">as release of 2.0.0, and it will be removed in 3.0.0. Use
              <a href="org/apache/hadoop/hbase/replication/ReplicationPeerConfigBuilder.html#setTableCFsMap-java.util.Map-"><code>ReplicationPeerConfigBuilder.setTableCFsMap(Map)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/Scan.html#setTimeStamp-long-">org.apache.hadoop.hbase.client.Scan.setTimeStamp(long)</a>
 <div class="block"><span class="deprecationComment">As of release 2.0.0, this will be removed in HBase 3.0.0.
              Use <a href="org/apache/hadoop/hbase/client/Scan.html#setTimestamp-long-"><code>Scan.setTimestamp(long)</code></a> instead</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/ImmutableScan.html#setTimeStamp-long-">org.apache.hadoop.hbase.client.ImmutableScan.setTimeStamp(long)</a></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/client/BufferedMutatorParams.html#setWriteBufferPeriodicFlushTimerTickMs-long-">org.apache.hadoop.hbase.client.BufferedMutatorParams.setWriteBufferPeriodicFlushTimerTickMs(long)</a>
 <div class="block"><span class="deprecationComment">Since 3.0.0, will be removed in 4.0.0. We use a common timer in the whole client
              implementation so you can not set it any more.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/token/TokenUtil.html#toToken-org.apache.hadoop.hbase.shaded.protobuf.generated.AuthenticationProtos.Token-">org.apache.hadoop.hbase.security.token.TokenUtil.toToken(AuthenticationProtos.Token)</a>
 <div class="block"><span class="deprecationComment">External users should not use this method. Please post on
    the HBase dev mailing list if you need this method. Internal
    HBase code should use <a href="org/apache/hadoop/hbase/security/token/ClientTokenUtil.html" title="class in org.apache.hadoop.hbase.security.token"><code>ClientTokenUtil</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/security/token/TokenUtil.html#toToken-org.apache.hadoop.security.token.Token-">org.apache.hadoop.hbase.security.token.TokenUtil.toToken(Token&lt;AuthenticationTokenIdentifier&gt;)</a>
 <div class="block"><span class="deprecationComment">External users should not use this method. Please post on
    the HBase dev mailing list if you need this method. Internal
    HBase code should use <a href="org/apache/hadoop/hbase/security/token/ClientTokenUtil.html" title="class in org.apache.hadoop.hbase.security.token"><code>ClientTokenUtil</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/replication/ReplicationPeer.html#trackPeerConfigChanges-org.apache.hadoop.hbase.replication.ReplicationPeerConfigListener-">org.apache.hadoop.hbase.replication.ReplicationPeer.trackPeerConfigChanges(ReplicationPeerConfigListener)</a>
 <div class="block"><span class="deprecationComment">since 2.1.0 and will be removed in 4.0.0. Use
    <a href="org/apache/hadoop/hbase/replication/ReplicationPeer.html#registerPeerConfigListener-org.apache.hadoop.hbase.replication.ReplicationPeerConfigListener-"><code>ReplicationPeer.registerPeerConfigListener(ReplicationPeerConfigListener)</code></a> instead.</span></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/regionserver/wal/Compressor.html#uncompressIntoArray-byte:A-int-java.io.DataInput-org.apache.hadoop.hbase.io.util.Dictionary-">org.apache.hadoop.hbase.regionserver.wal.Compressor.uncompressIntoArray(byte[], int, DataInput, Dictionary)</a></td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.updateCounters(ScanMetrics, long, Method, TaskAttemptContext, long)</a>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>TableRecordReaderImpl.updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colOne"><a href="org/apache/hadoop/hbase/zookeeper/ZKUtil.html#updateExistingNodeData-org.apache.hadoop.hbase.zookeeper.ZKWatcher-java.lang.String-byte:A-int-">org.apache.hadoop.hbase.zookeeper.ZKUtil.updateExistingNodeData(ZKWatcher, String, byte[], int)</a>
 <div class="block"><span class="deprecationComment">Unused</span></div>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 79cdbd5..e94504a 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -99804,6 +99804,12 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#retrieveFromFile-int:A-">retrieveFromFile(int[])</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">retrieveGetCounterWithStringsParams(TaskAttemptContext)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReaderImpl</a></dt>
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#retrieveGroupListFromGroupTable--">retrieveGroupListFromGroupTable()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html#retrieveGroupListFromZookeeper--">retrieveGroupListFromZookeeper()</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupInfoManagerImpl.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupInfoManagerImpl</a></dt>
@@ -123534,6 +123540,13 @@ service.</div>
 <div class="block">If hbase runs on new version of mapreduce, RecordReader has access to
  counters thus can update counters based on scanMetrics.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters(ScanMetrics, long, Method, TaskAttemptContext, long)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html" title="class in org.apache.had [...]
+<dd>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>TableRecordReaderImpl.updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters(ScanMetrics, long, TaskAttemptContext, long)</a></span> - Static method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordR [...]
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#updateCurrBlockRef-org.apache.hadoop.hbase.io.hfile.HFileBlock-">updateCurrBlockRef(HFileBlock)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 18685bf..31315d8 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/metrics/class-use/ScanMetrics.html b/devapidocs/org/apache/hadoop/hbase/client/metrics/class-use/ScanMetrics.html
index bbb0277..c40c6e0 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/metrics/class-use/ScanMetrics.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/metrics/class-use/ScanMetrics.html
@@ -264,6 +264,19 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><span class="typeNameLabel">TableRecordReaderImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache [...]
+              long&nbsp;numScannerRestarts,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;getCounter,
+              org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
+              long&nbsp;numStale)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="../../../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>TableRecordReaderImpl.updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected static void</code></td>
 <td class="colLast"><span class="typeNameLabel">TableRecordReaderImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metr [...]
               long&nbsp;numScannerRestarts,
               org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index f6b47f1..96e885e 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -443,23 +443,23 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index 0192935..880a54a 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -104,8 +104,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">EventType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="typeNameLink">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 946a458..05e40af 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index cd793c2..d9bf09d 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 00f804e..8b96757 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -301,11 +301,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 33d69d6..e0d239b 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -356,9 +356,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
index 7dc3ed6..0b0a5a1 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
@@ -18,8 +18,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":41,"i8":10,"i9":10,"i10":10,"i11":41,"i12":9};
+var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Public
-public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.46">TableRecordReaderImpl</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.47">TableRecordReaderImpl</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Iterate over an HBase table data, return (ImmutableBytesWritable, Result)
  pairs.</div>
@@ -227,7 +227,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd [...]
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd [...]
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
@@ -276,25 +276,46 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">retrieveGetCounterWithStringsParams</a></span>(org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+</div>
+</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/mapreduce/TableRecordReaderImpl.html#setHTable-org.apache.hadoop.hbase.client.Table-">setHTable</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;htable)</code>
 <div class="block">Sets the HBase table.</div>
 </td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#setScan-org.apache.hadoop.hbase.client.Scan-">setScan</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</code>
 <div class="block">Sets the scan defining the actual details like columns etc.</div>
 </td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters--">updateCounters</a></span>()</code>
 <div class="block">If hbase runs on new version of mapreduce, RecordReader has access to
  counters thus can update counters based on scanMetrics.</div>
 </td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>protected static void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
+              long&nbsp;numScannerRestarts,
+              <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;getCounter,
+              org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
+              long&nbsp;numStale)</code>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
+<div class="block"><span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</div>
+</td>
+</tr>
+<tr id="i12" 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/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">updateCounters</a></span>(<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
               long&nbsp;numScannerRestarts,
@@ -329,7 +350,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG_PER_ROW_COUNT</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.47">LOG_PER_ROW_COUNT</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.48">LOG_PER_ROW_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.LOG_PER_ROW_COUNT">Constant Field Values</a></dd>
@@ -342,7 +363,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.50">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.51">LOG</a></pre>
 </li>
 </ul>
 <a name="HBASE_COUNTER_GROUP_NAME">
@@ -351,7 +372,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_COUNTER_GROUP_NAME</h4>
-<pre>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/mapreduce/TableRecordReaderImpl.html#line.54">HBASE_COUNTER_GROUP_NAME</a></pre>
+<pre>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/mapreduce/TableRecordReaderImpl.html#line.55">HBASE_COUNTER_GROUP_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.HBASE_COUNTER_GROUP_NAME">Constant Field Values</a></dd>
@@ -364,7 +385,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>scanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.55">scanner</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ResultScanner.html" title="interface in org.apache.hadoop.hbase.client">ResultScanner</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.56">scanner</a></pre>
 </li>
 </ul>
 <a name="scan">
@@ -373,7 +394,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.56">scan</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.57">scan</a></pre>
 </li>
 </ul>
 <a name="currentScan">
@@ -382,7 +403,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>currentScan</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.57">currentScan</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.58">currentScan</a></pre>
 </li>
 </ul>
 <a name="htable">
@@ -391,7 +412,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>htable</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.58">htable</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.59">htable</a></pre>
 </li>
 </ul>
 <a name="lastSuccessfulRow">
@@ -400,7 +421,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>lastSuccessfulRow</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.59">lastSuccessfulRow</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.60">lastSuccessfulRow</a></pre>
 </li>
 </ul>
 <a name="key">
@@ -409,7 +430,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>key</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.60">key</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.61">key</a></pre>
 </li>
 </ul>
 <a name="value">
@@ -418,7 +439,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>value</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.61">value</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.62">value</a></pre>
 </li>
 </ul>
 <a name="context">
@@ -427,7 +448,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>context</h4>
-<pre>private&nbsp;org.apache.hadoop.mapreduce.TaskAttemptContext <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.62">context</a></pre>
+<pre>private&nbsp;org.apache.hadoop.mapreduce.TaskAttemptContext <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.63">context</a></pre>
 </li>
 </ul>
 <a name="numRestarts">
@@ -436,7 +457,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numRestarts</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.63">numRestarts</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.64">numRestarts</a></pre>
 </li>
 </ul>
 <a name="numStale">
@@ -445,7 +466,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>numStale</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.64">numStale</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.65">numStale</a></pre>
 </li>
 </ul>
 <a name="timestamp">
@@ -454,7 +475,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>timestamp</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.65">timestamp</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.66">timestamp</a></pre>
 </li>
 </ul>
 <a name="rowcount">
@@ -463,7 +484,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>rowcount</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.66">rowcount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.67">rowcount</a></pre>
 </li>
 </ul>
 <a name="logScannerActivity">
@@ -472,7 +493,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logScannerActivity</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.67">logScannerActivity</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.68">logScannerActivity</a></pre>
 </li>
 </ul>
 <a name="logPerRowCount">
@@ -481,7 +502,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logPerRowCount</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.68">logPerRowCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.69">logPerRowCount</a></pre>
 </li>
 </ul>
 </li>
@@ -498,7 +519,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableRecordReaderImpl</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.46">TableRecordReaderImpl</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.47">TableRecordReaderImpl</a>()</pre>
 </li>
 </ul>
 </li>
@@ -515,7 +536,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>restart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.76">restart</a>(byte[]&nbsp;firstRow)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.77">restart</a>(byte[]&nbsp;firstRow)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Restart from survivable exceptions by creating a new scanner.</div>
 <dl>
@@ -526,13 +547,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="retrieveGetCounterWithStringsParams-org.apache.hadoop.mapreduce.TaskAttemptContext-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>retrieveGetCounterWithStringsParams</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+protected static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.106">retrieveGetCounterWithStringsParams</a>(org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)
+                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0</span></div>
+<div class="block">In new mapreduce APIs, TaskAttemptContext has two getCounter methods
+ Check if getCounter(String, String) method is available.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>The getCounter method or null if not available.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="setHTable-org.apache.hadoop.hbase.client.Table-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>setHTable</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.102">setHTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;htable)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.124">setHTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;htable)</pre>
 <div class="block">Sets the HBase table.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -546,7 +587,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.114">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.136">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
 <div class="block">Sets the scan defining the actual details like columns etc.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -560,7 +601,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.121">initialize</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;inputsplit,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.143">initialize</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;inputsplit,
                        org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
@@ -578,7 +619,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.135">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.157">close</a>()</pre>
 <div class="block">Closes the split.</div>
 </li>
 </ul>
@@ -588,7 +629,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentKey</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.152">getCurrentKey</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.174">getCurrentKey</a>()
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Returns the current key.</div>
@@ -607,7 +648,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentValue</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.164">getCurrentValue</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.186">getCurrentValue</a>()
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Returns the current value.</div>
@@ -626,7 +667,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>nextKeyValue</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.176">nextKeyValue</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.198">nextKeyValue</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Positions the record reader to the next record.</div>
@@ -645,20 +686,36 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCounters</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.261">updateCounters</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.283">updateCounters</a>()</pre>
 <div class="block">If hbase runs on new version of mapreduce, RecordReader has access to
  counters thus can update counters based on scanMetrics.
  If hbase runs on old version of mapreduce, it won't be able to get
  access to counters and TableRecorderReader can't update counter values.</div>
 </li>
 </ul>
+<a name="updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-java.lang.reflect.Method-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>updateCounters</h4>
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
+protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.297">updateCounters</a>(<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
+                                                 long&nbsp;numScannerRestarts,
+                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Method.html?is-external=true" title="class or interface in java.lang.reflect">Method</a>&nbsp;getCounter,
+                                                 org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
+                                                 long&nbsp;numStale)</pre>
+<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and 2.3.2, will be removed in 4.0.0
+   Use <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-"><code>updateCounters(ScanMetrics, long, TaskAttemptContext, long)</code></a> instead.</span></div>
+</li>
+</ul>
 <a name="updateCounters-org.apache.hadoop.hbase.client.metrics.ScanMetrics-long-org.apache.hadoop.mapreduce.TaskAttemptContext-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCounters</h4>
-<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.270">updateCounters</a>(<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
+<pre>protected static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.302">updateCounters</a>(<a href="../../../../../org/apache/hadoop/hbase/client/metrics/ScanMetrics.html" title="class in org.apache.hadoop.hbase.client.metrics">ScanMetrics</a>&nbsp;scanMetrics,
                                      long&nbsp;numScannerRestarts,
                                      org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context,
                                      long&nbsp;numStale)</pre>
@@ -670,7 +727,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getProgress</h4>
-<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.302">getProgress</a>()</pre>
+<pre>public&nbsp;float&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html#line.334">getProgress</a>()</pre>
 <div class="block">The current progress of the record reader through its data.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index c2d28ae..3b4d03f 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -296,10 +296,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 0a90663..7f631d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -349,13 +349,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 54e16d1..88ab732 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -224,8 +224,8 @@
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 9850614..cb6bb92 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -426,18 +426,18 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 5ffe304..d36072c 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
index 2525a0e..7b64815 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
@@ -133,8 +133,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureStoreTracker.DeleteState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index e091531..fe17488 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index e87cf17..90d25fd 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -734,20 +734,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index bd7348f..ba24945 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index e92dbfa..e12604b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,9 +247,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index 6a56f8f..9965518 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -168,8 +168,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index b47c8cc..795500d 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -110,8 +110,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.FilterType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="typeNameLink">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index b39b1ae..62161b2 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,11 +162,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index ffdb431..c793825 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -190,8 +190,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 1cc1670..1c4097f 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -212,8 +212,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index b7d2284..91a3a2f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -542,14 +542,14 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
index 629e5ce..5269156 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.html
@@ -26,293 +26,325 @@
 <span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.mapreduce;<a name="line.18"></a>
 <span class="sourceLineNo">019</span><a name="line.19"></a>
 <span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.Map;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.conf.Configuration;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.client.ConnectionConfiguration;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.Result;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Table;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.mapreduce.Counter;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.util.StringUtils;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.Logger;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.slf4j.LoggerFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>/**<a name="line.41"></a>
-<span class="sourceLineNo">042</span> * Iterate over an HBase table data, return (ImmutableBytesWritable, Result)<a name="line.42"></a>
-<span class="sourceLineNo">043</span> * pairs.<a name="line.43"></a>
-<span class="sourceLineNo">044</span> */<a name="line.44"></a>
-<span class="sourceLineNo">045</span>@InterfaceAudience.Public<a name="line.45"></a>
-<span class="sourceLineNo">046</span>public class TableRecordReaderImpl {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public static final String LOG_PER_ROW_COUNT<a name="line.47"></a>
-<span class="sourceLineNo">048</span>      = "hbase.mapreduce.log.scanner.rowcount";<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(TableRecordReaderImpl.class);<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  // HBASE_COUNTER_GROUP_NAME is the name of mapreduce counter group for HBase<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @VisibleForTesting<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private ResultScanner scanner = null;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private Scan scan = null;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private Scan currentScan = null;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private Table htable = null;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private byte[] lastSuccessfulRow = null;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private ImmutableBytesWritable key = null;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private Result value = null;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private TaskAttemptContext context = null;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private long numRestarts = 0;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private long numStale = 0;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private long timestamp;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private int rowcount;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private boolean logScannerActivity = false;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private int logPerRowCount = 100;<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  /**<a name="line.70"></a>
-<span class="sourceLineNo">071</span>   * Restart from survivable exceptions by creating a new scanner.<a name="line.71"></a>
-<span class="sourceLineNo">072</span>   *<a name="line.72"></a>
-<span class="sourceLineNo">073</span>   * @param firstRow  The first row to start at.<a name="line.73"></a>
-<span class="sourceLineNo">074</span>   * @throws IOException When restarting fails.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>   */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public void restart(byte[] firstRow) throws IOException {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    // Update counter metrics based on current scan before reinitializing it<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    if (currentScan != null) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      updateCounters();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    }<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    currentScan = new Scan(scan);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    currentScan.withStartRow(firstRow);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    currentScan.setScanMetricsEnabled(true);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    if (this.scanner != null) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      if (logScannerActivity) {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        LOG.info("Closing the previously opened scanner object.");<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      }<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      this.scanner.close();<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    this.scanner = this.htable.getScanner(currentScan);<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    if (logScannerActivity) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      LOG.info("Current scan=" + currentScan.toString());<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      timestamp = System.currentTimeMillis();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      rowcount = 0;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Sets the HBase table.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * @param htable The table to scan.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  public void setHTable(Table htable) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    Configuration conf = htable.getConfiguration();<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    logScannerActivity = conf.getBoolean(ConnectionConfiguration.LOG_SCANNER_ACTIVITY, false);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    logPerRowCount = conf.getInt(LOG_PER_ROW_COUNT, 100);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    this.htable = htable;<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>   * Sets the scan defining the actual details like columns etc.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   *<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * @param scan  The scan to set.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public void setScan(Scan scan) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.scan = scan;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
-<span class="sourceLineNo">119</span>   * Build the scanner. Not done in constructor to allow for extension.<a name="line.119"></a>
-<span class="sourceLineNo">120</span>   */<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void initialize(InputSplit inputsplit,<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      TaskAttemptContext context) throws IOException,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      InterruptedException {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    if (context != null) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.context = context;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    restart(scan.getStartRow());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  }<a name="line.128"></a>
-<span class="sourceLineNo">129</span><a name="line.129"></a>
-<span class="sourceLineNo">130</span>  /**<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * Closes the split.<a name="line.131"></a>
-<span class="sourceLineNo">132</span>   *<a name="line.132"></a>
+<span class="sourceLineNo">021</span>import java.lang.reflect.Method;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.Map;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.conf.Configuration;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.DoNotRetryIOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.ConnectionConfiguration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.Result;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.client.ResultScanner;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.client.Table;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.client.metrics.ScanMetrics;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.mapreduce.Counter;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.util.StringUtils;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>/**<a name="line.42"></a>
+<span class="sourceLineNo">043</span> * Iterate over an HBase table data, return (ImmutableBytesWritable, Result)<a name="line.43"></a>
+<span class="sourceLineNo">044</span> * pairs.<a name="line.44"></a>
+<span class="sourceLineNo">045</span> */<a name="line.45"></a>
+<span class="sourceLineNo">046</span>@InterfaceAudience.Public<a name="line.46"></a>
+<span class="sourceLineNo">047</span>public class TableRecordReaderImpl {<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static final String LOG_PER_ROW_COUNT<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      = "hbase.mapreduce.log.scanner.rowcount";<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static final Logger LOG = LoggerFactory.getLogger(TableRecordReaderImpl.class);<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  // HBASE_COUNTER_GROUP_NAME is the name of mapreduce counter group for HBase<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  @VisibleForTesting<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  static final String HBASE_COUNTER_GROUP_NAME = "HBaseCounters";<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private ResultScanner scanner = null;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  private Scan scan = null;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private Scan currentScan = null;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private Table htable = null;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private byte[] lastSuccessfulRow = null;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private ImmutableBytesWritable key = null;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private Result value = null;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private TaskAttemptContext context = null;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private long numRestarts = 0;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private long numStale = 0;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private long timestamp;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private int rowcount;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private boolean logScannerActivity = false;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private int logPerRowCount = 100;<a name="line.69"></a>
+<span class="sourceLineNo">070</span><a name="line.70"></a>
+<span class="sourceLineNo">071</span>  /**<a name="line.71"></a>
+<span class="sourceLineNo">072</span>   * Restart from survivable exceptions by creating a new scanner.<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   *<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * @param firstRow  The first row to start at.<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * @throws IOException When restarting fails.<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  public void restart(byte[] firstRow) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    // Update counter metrics based on current scan before reinitializing it<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    if (currentScan != null) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>      updateCounters();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    currentScan = new Scan(scan);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    currentScan.withStartRow(firstRow);<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    currentScan.setScanMetricsEnabled(true);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    if (this.scanner != null) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      if (logScannerActivity) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        LOG.info("Closing the previously opened scanner object.");<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      }<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      this.scanner.close();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.scanner = this.htable.getScanner(currentScan);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    if (logScannerActivity) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      LOG.info("Current scan=" + currentScan.toString());<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      timestamp = System.currentTimeMillis();<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      rowcount = 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  }<a name="line.97"></a>
+<span class="sourceLineNo">098</span><a name="line.98"></a>
+<span class="sourceLineNo">099</span>  /**<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * In new mapreduce APIs, TaskAttemptContext has two getCounter methods<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * Check if getCounter(String, String) method is available.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @return The getCounter method or null if not available.<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * @deprecated since 2.4.0 and 2.3.2, will be removed in 4.0.0<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Deprecated<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  protected static Method retrieveGetCounterWithStringsParams(TaskAttemptContext context)<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    throws IOException {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    Method m = null;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    try {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      m = context.getClass().getMethod("getCounter",<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        new Class [] {String.class, String.class});<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    } catch (SecurityException e) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      throw new IOException("Failed test for getCounter", e);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    } catch (NoSuchMethodException e) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>      // Ignore<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    return m;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  /**<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * Sets the HBase table.<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @param htable The table to scan.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void setHTable(Table htable) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    Configuration conf = htable.getConfiguration();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    logScannerActivity = conf.getBoolean(ConnectionConfiguration.LOG_SCANNER_ACTIVITY, false);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    logPerRowCount = conf.getInt(LOG_PER_ROW_COUNT, 100);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.htable = htable;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /**<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * Sets the scan defining the actual details like columns etc.<a name="line.132"></a>
 <span class="sourceLineNo">133</span>   *<a name="line.133"></a>
-<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  public void close() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    if (this.scanner != null) {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      this.scanner.close();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    try {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      this.htable.close();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    } catch (IOException ioe) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      LOG.warn("Error closing table", ioe);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  }<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>  /**<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * Returns the current key.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   *<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @return The current key.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @throws InterruptedException When the job is aborted.<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public ImmutableBytesWritable getCurrentKey() throws IOException,<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      InterruptedException {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>    return key;<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  }<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>  /**<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * Returns the current value.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   *<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @return The current value.<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @throws IOException When the value is faulty.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @throws InterruptedException When the job is aborted.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    return value;<a name="line.165"></a>
+<span class="sourceLineNo">134</span>   * @param scan  The scan to set.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>   */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  public void setScan(Scan scan) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    this.scan = scan;<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>   * Build the scanner. Not done in constructor to allow for extension.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  public void initialize(InputSplit inputsplit,<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      TaskAttemptContext context) throws IOException,<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      InterruptedException {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    if (context != null) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      this.context = context;<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    restart(scan.getStartRow());<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  }<a name="line.150"></a>
+<span class="sourceLineNo">151</span><a name="line.151"></a>
+<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * Closes the split.<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 void close() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    if (this.scanner != null) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      this.scanner.close();<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    try {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      this.htable.close();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    } catch (IOException ioe) {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      LOG.warn("Error closing table", ioe);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    }<a name="line.165"></a>
 <span class="sourceLineNo">166</span>  }<a name="line.166"></a>
 <span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   * Positions the record reader to the next record.<a name="line.170"></a>
-<span class="sourceLineNo">171</span>   *<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * @return &lt;code&gt;true&lt;/code&gt; if there was another record.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @throws IOException When reading the record failed.<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @throws InterruptedException When the job was aborted.<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    if (key == null) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      key = new ImmutableBytesWritable();<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    }<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    if (value == null) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      value = new Result();<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    }<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    try {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      try {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        value = this.scanner.next();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>          numStale++;<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        }<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        if (logScannerActivity) {<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          rowcount ++;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>          if (rowcount &gt;= logPerRowCount) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>            long now = System.currentTimeMillis();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>            LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>            timestamp = now;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>            rowcount = 0;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          }<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      } catch (IOException e) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        // do not retry if the exception tells us not to do so<a name="line.199"></a>
-<span class="sourceLineNo">200</span>        if (e instanceof DoNotRetryIOException) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>          updateCounters();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>          throw e;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        // try to handle all other IOExceptions by restarting<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        // the scanner, if the second call fails, it will be rethrown<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.info("recovered from " + StringUtils.stringifyException(e));<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        if (lastSuccessfulRow == null) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          LOG.warn("We are restarting the first next() invocation," +<a name="line.208"></a>
-<span class="sourceLineNo">209</span>              " if your mapper has restarted a few other times like this" +<a name="line.209"></a>
-<span class="sourceLineNo">210</span>              " then you should consider killing this job and investigate" +<a name="line.210"></a>
-<span class="sourceLineNo">211</span>              " why it's taking so long.");<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        if (lastSuccessfulRow == null) {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          restart(scan.getStartRow());<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        } else {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          restart(lastSuccessfulRow);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>          scanner.next();    // skip presumed already mapped row<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        }<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        value = scanner.next();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          numStale++;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        }<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        numRestarts++;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>      if (value != null &amp;&amp; value.size() &gt; 0) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        key.set(value.getRow());<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        lastSuccessfulRow = key.get();<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        return true;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>      }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>      // Need handle cursor result<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      if (value != null &amp;&amp; value.isCursor()) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        key.set(value.getCursor().getRow());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        lastSuccessfulRow = key.get();<a name="line.235"></a>
-<span class="sourceLineNo">236</span>        return true;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      }<a name="line.237"></a>
-<span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>      updateCounters();<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      return false;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } catch (IOException ioe) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      updateCounters();<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      if (logScannerActivity) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>        long now = System.currentTimeMillis();<a name="line.244"></a>
-<span class="sourceLineNo">245</span>        LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        LOG.info(ioe.toString(), ioe);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        String lastRow = lastSuccessfulRow == null ?<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          "null" : Bytes.toStringBinary(lastSuccessfulRow);<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        LOG.info("lastSuccessfulRow=" + lastRow);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      throw ioe;<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><a name="line.254"></a>
-<span class="sourceLineNo">255</span>  /**<a name="line.255"></a>
-<span class="sourceLineNo">256</span>   * If hbase runs on new version of mapreduce, RecordReader has access to<a name="line.256"></a>
-<span class="sourceLineNo">257</span>   * counters thus can update counters based on scanMetrics.<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * If hbase runs on old version of mapreduce, it won't be able to get<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   * access to counters and TableRecorderReader can't update counter values.<a name="line.259"></a>
-<span class="sourceLineNo">260</span>   */<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  private void updateCounters() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    if (scanMetrics == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      return;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    }<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    updateCounters(scanMetrics, numRestarts, context, numStale);<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>  protected static void updateCounters(ScanMetrics scanMetrics, long numScannerRestarts,<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      TaskAttemptContext context, long numStale) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    // we can get access to counters only if hbase uses new mapreduce APIs<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (context == null) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
+<span class="sourceLineNo">168</span>  /**<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * Returns the current key.<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   *<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * @return The current key.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   * @throws InterruptedException When the job is aborted.<a name="line.172"></a>
+<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public ImmutableBytesWritable getCurrentKey() throws IOException,<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      InterruptedException {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    return key;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * Returns the current value.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   *<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @return The current value.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @throws IOException When the value is faulty.<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * @throws InterruptedException When the job is aborted.<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   */<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    return value;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  }<a name="line.188"></a>
+<span class="sourceLineNo">189</span><a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   * Positions the record reader to the next record.<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   *<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * @return &lt;code&gt;true&lt;/code&gt; if there was another record.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * @throws IOException When reading the record failed.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @throws InterruptedException When the job was aborted.<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    if (key == null) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      key = new ImmutableBytesWritable();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    if (value == null) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      value = new Result();<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    try {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      try {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        value = this.scanner.next();<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>          numStale++;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        }<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        if (logScannerActivity) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          rowcount ++;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>          if (rowcount &gt;= logPerRowCount) {<a name="line.213"></a>
+<span class="sourceLineNo">214</span>            long now = System.currentTimeMillis();<a name="line.214"></a>
+<span class="sourceLineNo">215</span>            LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>            timestamp = now;<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            rowcount = 0;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          }<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      } catch (IOException e) {<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        // do not retry if the exception tells us not to do so<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        if (e instanceof DoNotRetryIOException) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          updateCounters();<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          throw e;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        // try to handle all other IOExceptions by restarting<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        // the scanner, if the second call fails, it will be rethrown<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        LOG.info("recovered from " + StringUtils.stringifyException(e));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        if (lastSuccessfulRow == null) {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          LOG.warn("We are restarting the first next() invocation," +<a name="line.230"></a>
+<span class="sourceLineNo">231</span>              " if your mapper has restarted a few other times like this" +<a name="line.231"></a>
+<span class="sourceLineNo">232</span>              " then you should consider killing this job and investigate" +<a name="line.232"></a>
+<span class="sourceLineNo">233</span>              " why it's taking so long.");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        }<a name="line.234"></a>
+<span class="sourceLineNo">235</span>        if (lastSuccessfulRow == null) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          restart(scan.getStartRow());<a name="line.236"></a>
+<span class="sourceLineNo">237</span>        } else {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          restart(lastSuccessfulRow);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          scanner.next();    // skip presumed already mapped row<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        value = scanner.next();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>        if (value != null &amp;&amp; value.isStale()) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>          numStale++;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        }<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        numRestarts++;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
+<span class="sourceLineNo">247</span><a name="line.247"></a>
+<span class="sourceLineNo">248</span>      if (value != null &amp;&amp; value.size() &gt; 0) {<a name="line.248"></a>
+<span class="sourceLineNo">249</span>        key.set(value.getRow());<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        lastSuccessfulRow = key.get();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        return true;<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>      // Need handle cursor result<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      if (value != null &amp;&amp; value.isCursor()) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        key.set(value.getCursor().getRow());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        lastSuccessfulRow = key.get();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        return true;<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>      updateCounters();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      return false;<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    } catch (IOException ioe) {<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      updateCounters();<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      if (logScannerActivity) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        long now = System.currentTimeMillis();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        LOG.info("Mapper took {}ms to process {} rows", (now - timestamp), rowcount);<a name="line.267"></a>
+<span class="sourceLineNo">268</span>        LOG.info(ioe.toString(), ioe);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>        String lastRow = lastSuccessfulRow == null ?<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          "null" : Bytes.toStringBinary(lastSuccessfulRow);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        LOG.info("lastSuccessfulRow=" + lastRow);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      throw ioe;<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    }<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
 <span class="sourceLineNo">276</span><a name="line.276"></a>
-<span class="sourceLineNo">277</span>      for (Map.Entry&lt;String, Long&gt; entry : scanMetrics.getMetricsMap().entrySet()) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, entry.getKey());<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        if (counter != null) {<a name="line.279"></a>
-<span class="sourceLineNo">280</span>          counter.increment(entry.getValue());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      }<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      if (numScannerRestarts != 0L) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCANNER_RESTARTS");<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        if (counter != null) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          counter.increment(numScannerRestarts);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        }<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      if (numStale != 0L) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCAN_RESULTS_STALE");<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        if (counter != null) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          counter.increment(numStale);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  }<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>  /**<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   * The current progress of the record reader through its data.<a name="line.298"></a>
-<span class="sourceLineNo">299</span>   *<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * @return A number between 0.0 and 1.0, the fraction of the data read.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   */<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public float getProgress() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    // Depends on the total number of tuples<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    return 0;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  }<a name="line.305"></a>
-<span class="sourceLineNo">306</span><a name="line.306"></a>
-<span class="sourceLineNo">307</span>}<a name="line.307"></a>
+<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * If hbase runs on new version of mapreduce, RecordReader has access to<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * counters thus can update counters based on scanMetrics.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   * If hbase runs on old version of mapreduce, it won't be able to get<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * access to counters and TableRecorderReader can't update counter values.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  private void updateCounters() {<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    ScanMetrics scanMetrics = scanner.getScanMetrics();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    if (scanMetrics == null) {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      return;<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    }<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>    updateCounters(scanMetrics, numRestarts, context, numStale);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
+<span class="sourceLineNo">291</span><a name="line.291"></a>
+<span class="sourceLineNo">292</span>  /**<a name="line.292"></a>
+<span class="sourceLineNo">293</span>   * @deprecated since 2.4.0 and 2.3.2, will be removed in 4.0.0<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   *   Use {@link #updateCounters(ScanMetrics, long, TaskAttemptContext, long)} instead.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Deprecated<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  protected static void updateCounters(ScanMetrics scanMetrics, long numScannerRestarts,<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      Method getCounter, TaskAttemptContext context, long numStale) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    updateCounters(scanMetrics, numScannerRestarts, context, numStale);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  protected static void updateCounters(ScanMetrics scanMetrics, long numScannerRestarts,<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      TaskAttemptContext context, long numStale) {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    // we can get access to counters only if hbase uses new mapreduce APIs<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    if (context == null) {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      return;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    }<a name="line.307"></a>
+<span class="sourceLineNo">308</span><a name="line.308"></a>
+<span class="sourceLineNo">309</span>      for (Map.Entry&lt;String, Long&gt; entry : scanMetrics.getMetricsMap().entrySet()) {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, entry.getKey());<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        if (counter != null) {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>          counter.increment(entry.getValue());<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        }<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      if (numScannerRestarts != 0L) {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCANNER_RESTARTS");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        if (counter != null) {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          counter.increment(numScannerRestarts);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        }<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      }<a name="line.320"></a>
+<span class="sourceLineNo">321</span>      if (numStale != 0L) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        Counter counter = context.getCounter(HBASE_COUNTER_GROUP_NAME, "NUM_SCAN_RESULTS_STALE");<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (counter != null) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          counter.increment(numStale);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      }<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  /**<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * The current progress of the record reader through its data.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   *<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @return A number between 0.0 and 1.0, the fraction of the data read.<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public float getProgress() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    // Depends on the total number of tuples<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    return 0;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  }<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>}<a name="line.339"></a>
 
 
 
diff --git a/downloads.html b/downloads.html
index 5c4b49b..b8746a3 100644
--- a/downloads.html
+++ b/downloads.html
@@ -433,7 +433,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/export_control.html b/export_control.html
index 9277bbb..c88a137 100644
--- a/export_control.html
+++ b/export_control.html
@@ -197,7 +197,7 @@ for more details.</p>
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/index.html b/index.html
index f62849a..d5360a7 100644
--- a/index.html
+++ b/index.html
@@ -275,7 +275,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/issue-tracking.html b/issue-tracking.html
index cf710dc..2f3dd49 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -169,7 +169,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/mail-lists.html b/mail-lists.html
index 68e16a1..2c3c899 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -229,7 +229,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/metrics.html b/metrics.html
index 97ff6b0..c02b64e 100644
--- a/metrics.html
+++ b/metrics.html
@@ -325,7 +325,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/old_news.html b/old_news.html
index 51dced3..0d92b59 100644
--- a/old_news.html
+++ b/old_news.html
@@ -316,7 +316,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugin-management.html b/plugin-management.html
index 8c61b57..9ed36ff 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -321,7 +321,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugins.html b/plugins.html
index c64db83..3b27348 100644
--- a/plugins.html
+++ b/plugins.html
@@ -248,7 +248,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index d5e1f97..309817d 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -650,7 +650,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-info.html b/project-info.html
index 8fb9fa1..4cf2f67 100644
--- a/project-info.html
+++ b/project-info.html
@@ -210,7 +210,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-reports.html b/project-reports.html
index d7592da..06079af 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -186,7 +186,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-summary.html b/project-summary.html
index b60aa0b..615a3ad 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -212,7 +212,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 17a1630..41a351c 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -174,7 +174,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/replication.html b/replication.html
index 4884d6a..5ffa311 100644
--- a/replication.html
+++ b/replication.html
@@ -169,7 +169,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/resources.html b/resources.html
index bdd1032..8bd9536 100644
--- a/resources.html
+++ b/resources.html
@@ -197,7 +197,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/source-repository.html b/source-repository.html
index 3f0bc5f..c3c3a96 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -180,7 +180,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/sponsors.html b/sponsors.html
index ed2f866..c734f5d 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -199,7 +199,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/supportingprojects.html b/supportingprojects.html
index 1c93f03..d4fe7ca 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -390,7 +390,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/team-list.html b/team-list.html
index 24863a2..e959dc7 100644
--- a/team-list.html
+++ b/team-list.html
@@ -701,7 +701,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-15</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>